diff options
| author | bculkin2442 <bjculkin@mix.wvu.edu> | 2017-02-24 04:15:20 -0500 |
|---|---|---|
| committer | bculkin2442 <bjculkin@mix.wvu.edu> | 2017-02-24 04:15:20 -0500 |
| commit | 5e246adccf986af9dd032d6e8645ddd5d2a577d4 (patch) | |
| tree | 96cc49b43b32f1b38e4d848419d2b23a4c74b217 /dice-lang/src/bjc/dicelang/v2/Evaluator.java | |
| parent | a942114b89013732a2be3092cdb65cafc4566fe0 (diff) | |
Work on unary operators
Specifically, the coercive operator for allowing mixing floats and ints
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; |
