ASTOperatorUnary class

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

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

extends: ASTOperator

Поля (9)

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

Методы (5)

МодификаторыВозвратСигнатура
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Failed to evaluate constant unary AST")
abstract throw new ParseExceptionthrow new ParseException("Type mismatch for operator " + var3, var2)
static void fromUnaryOperatorvoid fromUnaryOperator(@Nonnull Parser.ParsedToken var0, @Nonnull CompileContext var1)
if if(var11 == null)
if if(var9 == 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.OperatorUnary;
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 ASTOperatorUnary class="kw">extends ASTOperator {
   class="kw">public ASTOperatorUnary(@Nonnull OperatorUnary var1, @Nonnull Token var2, int var3, @Nonnull AST var4) {
      super(var1.getResultType(), var2, var3);
      this.addArgument(var4);
      this.codeGen = var1.getCodeGen();
   }

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

   class="kw">public class="kw">static void fromUnaryOperator(@Nonnull Parser.ParsedToken var0, @Nonnull CompileContext var1) class="kw">throws ParseException {
      int var2 = var0.tokenPosition;
      Token var3 = var0.token;
      Stack var4 = var1.getOperandStack();

      try {
         AST var5 = var4.pop();
         OperatorUnary var11 = OperatorUnary.findOperator(var3, var5.returnType());
         if (var11 == null) {
            throw new ParseException("Type mismatch for operator " + var3, var2);
         }

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

            var4.push(ASTOperand.createFromOperand(var3, var2, var7.top()));
         } else if (var11.hasCodeGen()) {
            var4.push(new ASTOperatorUnary(var11, var3, var2, var5));
         } else {
            var4.push(var5);
         }
      } catch (NoSuchElementException var10) {
         ParseException var6 = new ParseException("Not enough operands for operator '" + var0.tokenString, var2);
         var6.initCause(var10);
         throw var6;
      }
   }
}