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