ASTOperatorBinary class

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

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

extends: ASTOperator

Поля (8)

МодификаторыТипИмя
AST var10
Stack var2
AST var3
ParseException var4
OperatorBinary var5
ExecutionContext var6
List var7
ValueType var8

Методы (5)

МодификаторыВозвратСигнатура
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Failed to evaluate constant binary AST")
abstract throw new ParseExceptionthrow new ParseException("Type mismatch for operator " + var0.token, var0.tokenPosition)
static void fromBinaryOperatorvoid fromBinaryOperator(@Nonnull Parser.ParsedToken var0, @Nonnull CompileContext var1)
if if(var5 == null)
if if(var8 == ValueType.VOID)

Исходный код

Показать/скрыть
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.OperatorBinary;
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.text.ParseException;
class="kw">import java.util.List;
class="kw">import java.util.NoSuchElementException;
class="kw">import java.util.Stack;
class="kw">import javax.annotation.Nonnull;

class="kw">public class ASTOperatorBinary class="kw">extends ASTOperator {
   class="kw">public ASTOperatorBinary(@Nonnull OperatorBinary var1, @Nonnull Token var2, int var3, @Nonnull AST var4, @Nonnull AST var5) {
      super(var1.getResultType(), var2, var3);
      this.addArgument(var4);
      this.addArgument(var5);
      this.codeGen = var1.getCodeGen();
   }

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

   class="kw">public class="kw">static void fromBinaryOperator(@Nonnull Parser.ParsedToken var0, @Nonnull CompileContext var1) class="kw">throws ParseException {
      Stack var2 = var1.getOperandStack();

      try {
         AST var3 = var2.pop();
         AST var10 = var2.pop();
         OperatorBinary var5 = OperatorBinary.findOperator(var0.token, var10.returnType(), var3.returnType());
         if (var5 == null) {
            throw new ParseException("Type mismatch for operator " + var0.token, var0.tokenPosition);
         }

         if (var10.isConstant() && var3.isConstant()) {
            ExecutionContext var6 = var1.getExecutionContext();
            List var7 = var1.getInstructions();
            var7.clear();
            var10.genCode(var7, null);
            var3.genCode(var7, null);
            var7.add(var5.getCodeGen().apply(null));
            ValueType var8 = var6.execute(var7);
            if (var8 == ValueType.VOID) {
               throw new IllegalStateException("Failed to evaluate constant binary AST");
            }

            var2.push(ASTOperand.createFromOperand(var0.token, var0.tokenPosition, var6.top()));
         } else {
            var2.push(new ASTOperatorBinary(var5, var0.token, var0.tokenPosition, var10, var3));
         }
      } catch (NoSuchElementException var9) {
         ParseException var4 = new ParseException("Not enough operands for operator '" + var0.tokenString, var0.tokenPosition);
         var4.initCause(var9);
         throw var4;
      }
   }
}