|
@@ -467,6 +467,32 @@ class VarDefine extends Node {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+class VarDestructuringDefine extends VarDefine {
|
|
|
+ constructor(span, tokens, expression, defineType) {
|
|
|
+ super(span, null, expression, defineType)
|
|
|
+ this.expression = expression
|
|
|
+ this.tokens = tokens
|
|
|
+ this.defineType = defineType !== 'var' && defineType !== 'const' && defineType !== 'let' && defineType
|
|
|
+ }
|
|
|
+
|
|
|
+ expressions() {
|
|
|
+ return this.expression == null ? [] : [this.expression]
|
|
|
+ }
|
|
|
+
|
|
|
+ async getJavaType(env) {
|
|
|
+ let type = 'java.lang.Object'
|
|
|
+ if (this.defineType) {
|
|
|
+ type = env[this.defineType] || type
|
|
|
+ } else if (this.expression) {
|
|
|
+ type = await this.expression.getJavaType(env);
|
|
|
+ }
|
|
|
+ for (const token of this.tokens) {
|
|
|
+ env[token.getVarName()] = type
|
|
|
+ }
|
|
|
+ return type
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
class TernaryOperation extends Node {
|
|
|
constructor(condition, trueExpression, falseExpression) {
|
|
|
super(new Span(condition.getSpan(), falseExpression.getSpan()));
|
|
@@ -718,6 +744,7 @@ export {
|
|
|
WhileStatement,
|
|
|
Import,
|
|
|
VarDefine,
|
|
|
+ VarDestructuringDefine,
|
|
|
TernaryOperation,
|
|
|
BinaryOperation,
|
|
|
Spread,
|
|
@@ -732,4 +759,4 @@ export {
|
|
|
ClassConverter,
|
|
|
LanguageExpression,
|
|
|
Throw
|
|
|
-}
|
|
|
+}
|