diff options
Diffstat (limited to 'dice-lang/src/bjc/dicelang/v2/Evaluator.java')
| -rw-r--r-- | dice-lang/src/bjc/dicelang/v2/Evaluator.java | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/dice-lang/src/bjc/dicelang/v2/Evaluator.java b/dice-lang/src/bjc/dicelang/v2/Evaluator.java index 72d7779..969b2d5 100644 --- a/dice-lang/src/bjc/dicelang/v2/Evaluator.java +++ b/dice-lang/src/bjc/dicelang/v2/Evaluator.java @@ -158,6 +158,13 @@ public class Evaluator { private TopDownTransformResult pickEvaluationType(Node nd) { switch(nd.type) { + case UNARYOP: + switch(nd.operatorType) { + case COERCE: + return TopDownTransformResult.PULLUP; + default: + return TopDownTransformResult.PUSHDOWN; + } default: return TopDownTransformResult.PUSHDOWN; } @@ -166,8 +173,7 @@ public class Evaluator { private ITree<Node> evaluateNode(ITree<Node> ast, Context ctx) { switch(ast.getHead().type) { case UNARYOP: - System.out.println("\tEVALUATOR ERROR: Unary operator evaluation isn't supported yet"); - return new Tree<>(FAIL(ast)); + return evaluateUnaryOp(ast, ctx); case BINOP: return evaluateBinaryOp(ast, ctx); case TOKREF: @@ -180,6 +186,20 @@ public class Evaluator { } } + private ITree<Node> evaluateUnaryOp(ITree<Node> ast, Context ctx) { + switch(ast.getHead().operatorType) { + case COERCE: + if(ast.getChildrenCount() != 1) { + Errors.inst.printError(EK_EVAL_NOTUNARY, ast.getChildrenCount()); + return new Tree<>(FAIL(AST)); + } + break; + default: + Errors.inst.printError(EK_EVAL_INVUNARY, ast.getHead().operatorType.toString()); + return new Tree<>(FAIL(ast)); + } + } + private ITree<Node> evaluateBinaryOp(ITree<Node> ast, Context ctx) { Token.Type binOp = ast.getHead().operatorType; |
