From 240384569dc4fbc14619d25bfb5a6666b401204c Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Thu, 7 Oct 2010 17:10:27 +0000 Subject: [PATCH] added ElseNode, handling elsif and else correctly git-svn-id: svn://anubis/fart/trunk@358 7f9b0f55-74a9-4bce-be96-3c2cd072584d --- parser/nodes.cc | 9 ++++++++- parser/nodes.h | 6 ++++++ parser/parser.yy | 4 ++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/parser/nodes.cc b/parser/nodes.cc index 4854770..2584bb9 100644 --- a/parser/nodes.cc +++ b/parser/nodes.cc @@ -157,8 +157,15 @@ NodeRef IfNode::evaluate() } else if ( ! m_elses.isNull() ) { - eval->addChild(m_elses->evaluate()); + return m_elses->evaluate(); } return eval; } + +NodeRef ElseNode::evaluate() +{ + NodeRef eval = new EvaluatePropagateNode(); + evaluateChildren(eval); + return eval; +} diff --git a/parser/nodes.h b/parser/nodes.h index 53e0181..e0c865d 100644 --- a/parser/nodes.h +++ b/parser/nodes.h @@ -744,6 +744,12 @@ class IfNode : public Node NodeRef m_test_expr, m_elses; }; +class ElseNode : public Node +{ + public: + virtual NodeRef evaluate(); +}; + /* this class is only used to hold a set of items coming out of a class's * evaluate() from above. the evaluateChildren() top-level method will * propagate children of this class up to the level of their parent */ diff --git a/parser/parser.yy b/parser/parser.yy index a1f8eec..6385174 100644 --- a/parser/parser.yy +++ b/parser/parser.yy @@ -431,8 +431,12 @@ if: IF LPAREN bool_expression RPAREN LCURLY general_items RCURLY if_more { if_more: /* empty */ | ELSIF LPAREN bool_expression RPAREN LCURLY general_items RCURLY if_more { + $$ = new IfNode($3, $8); + $$->addChildren($6); } | ELSE LCURLY general_items RCURLY { + $$ = new ElseNode(); + $$->addChildren($3); } ; %%