From fc33024b28bc96ab08469290c2226f2d711ae821 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Thu, 7 Oct 2010 14:43:56 +0000 Subject: [PATCH] added MOD operator, converting operands to ints git-svn-id: svn://anubis/fart/trunk@351 7f9b0f55-74a9-4bce-be96-3c2cd072584d --- parser/nodes.cc | 7 +++---- parser/parser.yy | 3 ++- 2 files changed, 5 insertions(+), 5 deletions(-) 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); }