ASTOperatorFunctionCall class

Пакет: com.hypixel.hytale.server.npc.util.expression.compile.ast

Файл: com/hypixel/hytale/server/npc/util/expression/compile/ast/ASTOperatorFunctionCall.java

extends: ASTOperator

Поля (15)

МодификаторыТипИмя
final String functionName
AST var10
ValueType var11
ASTOperatorFunctionCall var12
String var16
Scope var17
List var18
ExecutionContext var19
Stack var2
ValueType var20
int var3
AST var4
StringBuilder var6
boolean var7
int var8

Методы (9)

МодификаторыВозвратСигнатура
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Failed to evaluate constant function AST")
for for(int var9 = var8; var9 < var3; var9++)
for for(int var14 = var8; var14 < var3; var14++)
for for(int var13 = var8; var13 < var3; var13++)
static void fromParsedFunctionvoid fromParsedFunction(int var0, @Nonnull CompileContext var1)
if if(var11 == null)
if if(var7)
if if(var20 == ValueType.VOID)
abstract super super(var1, Token.FUNCTION_CALL, 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.Scope;
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.Token;
class="kw">import java.text.ParseException;
class="kw">import java.util.List;
class="kw">import java.util.Stack;
class="kw">import javax.annotation.Nonnull;

class="kw">public class ASTOperatorFunctionCall class="kw">extends ASTOperator {
   class="kw">private class="kw">final String functionName;

   class="kw">public ASTOperatorFunctionCall(@Nonnull ValueType var1, String var2, int var3) {
      super(var1, Token.FUNCTION_CALL, var3);
      this.functionName = var2;
      this.codeGen = var1x -> ExecutionContext.genCALL(this.functionName, this.getArguments().size(), var1x);
   }

   @Override
   class="kw">public boolean isConstant() {
      class="kw">return false;
   }

   class="kw">public class="kw">static void fromParsedFunction(int var0, @Nonnull CompileContext var1) class="kw">throws ParseException {
      Stack var2 = var1.getOperandStack();
      int var3 = var2.size();
      AST var4 = var2.get(var3 - var0 - 1);
      if (!(var4 class="kw">instanceof ASTOperandIdentifier var5)) {
         throw new ParseException("Expected identifier for function name but found type " + var4.getValueType(), var4.getTokenPosition());
      } else {
         StringBuilder var6 = new StringBuilder(var5.getIdentifier()).append('@');
         boolean var7 = true;
         int var8 = var3 - var0;

         for (int var9 = var8; var9 < var3; var9++) {
            AST var10 = var2.get(var9);
            var6.append(Scope.encodeType(var10.getValueType()));
            var7 &= var10.isConstant();
         }

         String var16 = var6.toString();
         Scope var17 = var1.getScope();
         ValueType var11 = var17.getType(var16);
         if (var11 == null) {
            throw new IllegalStateException("Unable to find function (or argument types are not matching):" + var16);
         }

         var7 &= var17.isConstant(var16);
         if (var7) {
            List var18 = var1.getInstructions();
            ExecutionContext var19 = var1.getExecutionContext();
            var18.clear();

            for (int var14 = var8; var14 < var3; var14++) {
               var2.get(var14).genCode(var18, null);
            }

            var18.add(ExecutionContext.genCALL(var16, var0, null));
            ValueType var20 = var19.execute(var18, var17);
            if (var20 == ValueType.VOID) {
               throw new IllegalStateException("Failed to evaluate constant function AST");
            }

            var2.setSize(var8 - 1);
            var2.push(ASTOperand.createFromOperand(var4.getToken(), var4.getTokenPosition(), var19.top()));
         } else {
            ASTOperatorFunctionCall var12 = new ASTOperatorFunctionCall(var11, var16, var4.getTokenPosition());

            for (int var13 = var8; var13 < var3; var13++) {
               var12.addArgument(var2.get(var13));
            }

            var2.setSize(var8 - 1);
            var2.push(var12);
         }
      }
   }
}