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);
         }
      }
   }
}