ASTOperatorTuple class
Пакет: com.hypixel.hytale.server.npc.util.expression.compile.ast
Файл: com/hypixel/hytale/server/npc/util/expression/compile/ast/ASTOperatorTuple.java
extends: ASTOperator
Поля (11)
| Модификаторы | Тип | Имя |
|---|---|---|
|
boolean |
var10 |
|
AST |
var12 |
|
ASTOperatorTuple |
var13 |
|
ASTOperand |
var14 |
|
Token |
var3 |
|
int |
var4 |
|
Stack |
var5 |
|
int |
var6 |
|
int |
var7 |
|
ValueType |
var8 |
|
ValueType |
var9 |
Методы (7)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
for for(int var11 = var7; var11 < var6; var11++) |
|
|
for for(int var15 = var7; var15 < var6; var15++) |
static |
void |
fromParsedTuplevoid fromParsedTuple(@Nonnull Parser.ParsedToken var0, int var1, @Nonnull CompileContext var2) |
|
|
if if(var3 != Token.OPEN_SQUARE_BRACKET) |
|
|
if if(var1 == 0) |
|
|
if if(var10) |
abstract |
|
super super(var1, var2, var3) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.util.expression.compile.ast;
class="kw">import com.hypixel.hytale.server.npc.util.expression.ExecutionContext;
class="kw">import com.hypixel.hytale.server.npc.util.expression.ValueType;
class="kw">import com.hypixel.hytale.server.npc.util.expression.compile.CompileContext;
class="kw">import com.hypixel.hytale.server.npc.util.expression.compile.Parser;
class="kw">import com.hypixel.hytale.server.npc.util.expression.compile.Token;
class="kw">import java.util.Stack;
class="kw">import javax.annotation.Nonnull;
class="kw">public class ASTOperatorTuple class="kw">extends ASTOperator {
class="kw">public ASTOperatorTuple(@Nonnull ValueType var1, @Nonnull Token var2, int var3) {
super(var1, var2, var3);
this.codeGen = var1x -> ExecutionContext.genPACK(this.getValueType(), this.getArguments().size());
}
@Override
class="kw">public boolean isConstant() {
class="kw">return false;
}
class="kw">public class="kw">static void fromParsedTuple(@Nonnull Parser.ParsedToken var0, int var1, @Nonnull CompileContext var2) {
Token var3 = var0.token;
if (var3 != Token.OPEN_SQUARE_BRACKET) {
throw new IllegalStateException("Bad opening bracket for tuple: " + var3.get());
}
int var4 = var0.tokenPosition;
Stack var5 = var2.getOperandStack();
if (var1 == 0) {
var5.push(new ASTOperandEmptyArray(var3, var4));
} else {
int var6 = var5.size();
int var7 = var6 - var1;
ValueType var8 = var5.get(var7).getValueType();
ValueType var9 = class="kw">switch (var8) {
case NUMBER -> ValueType.NUMBER_ARRAY;
case STRING -> ValueType.STRING_ARRAY;
case BOOLEAN -> ValueType.BOOLEAN_ARRAY;
class="kw">default -> throw new IllegalStateException("Invalid type in array: " + var8);
};
boolean var10 = true;
for (int var11 = var7; var11 < var6; var11++) {
AST var12 = var5.get(var11);
var10 &= var12.isConstant();
if (var12.getValueType() != var8) {
throw new IllegalStateException("Mismatching types in array. Expected " + var8 + ", found " + var12.getValueType());
}
}
if (var10) {
ASTOperand var14 = class="kw">switch (var9) {
case NUMBER_ARRAY -> new ASTOperandNumberArray(var3, var4, var5, var7, var1);
case STRING_ARRAY -> new ASTOperandStringArray(var3, var4, var5, var7, var1);
case BOOLEAN_ARRAY -> new ASTOperandBooleanArray(var3, var4, var5, var7, var1);
class="kw">default -> throw new IllegalStateException("Unexpected array type when creating constant array: " + var9);
};
var5.setSize(var7);
var5.push(var14);
} else {
ASTOperatorTuple var13 = new ASTOperatorTuple(var9, var3, var4);
for (int var15 = var7; var15 < var6; var15++) {
var13.addArgument(var5.get(var15));
}
var5.setSize(var7);
var5.push(var13);
}
}
}
}