diff --git a/parser/nodes.cc b/parser/nodes.cc index 4e1b688..b3e19e1 100644 --- a/parser/nodes.cc +++ b/parser/nodes.cc @@ -74,6 +74,9 @@ NodeRef BinOpNode::evaluate() case '-': r = o - t; break; + case '%': + r = (int) o % (int) t; + break; default: cerr << "Error: BinOpNode created with op '" << m_op << "'" << endl; exit(-3); @@ -162,10 +165,6 @@ NodeRef ForNode::evaluate() } } - /* clear out all child nodes so that evaluateChildren() doesn't - * attempt to evaluate them */ - m_children.clear(); - return eval; } diff --git a/parser/parser.yy b/parser/parser.yy index c42cbd4..7c89203 100644 --- a/parser/parser.yy +++ b/parser/parser.yy @@ -119,7 +119,7 @@ refptr parser_scope; %right ASSIGN %left PLUS MINUS -%left TIMES DIVIDE +%left TIMES DIVIDE MOD %left UMINUS %% @@ -587,6 +587,7 @@ vector3: LESS expression COMMA expression COMMA expression GREATER { expression: term { $$ = $1; } | expression TIMES term { $$ = new BinOpNode('*', $1, $3); } | expression DIVIDE term { $$ = new BinOpNode('/', $1, $3); } + | expression MOD term { $$ = new BinOpNode('%', $1, $3); } | MINUS expression %prec UMINUS { $$ = new BinOpNode('-', new NumberNode(0.0), $2); }