Added scope new/push to wesley

This commit is contained in:
Jonathan Turner
2009-06-05 22:57:13 +00:00
parent 1dbaa4062c
commit 4cf95bbf9c
2 changed files with 5 additions and 3 deletions

View File

@@ -54,7 +54,7 @@ class BoxedCPP_System
void pop_scope() void pop_scope()
{ {
if (m_scopes.size() == 1) if (m_scopes.size() > 1)
{ {
m_scopes.pop_back(); m_scopes.pop_back();
} else { } else {
@@ -70,7 +70,7 @@ class BoxedCPP_System
if (itr != m_scopes[i].end()) if (itr != m_scopes[i].end())
{ {
return itr->second; return itr->second;
} }
} }
throw std::range_error("Object not known: " + name); throw std::range_error("Object not known: " + name);

View File

@@ -293,9 +293,11 @@ Boxed_Value eval_token(BoxedCPP_System &ss, TokenPtr node) {
} }
break; break;
case (TokenType::Scoped_Block) : { case (TokenType::Scoped_Block) : {
ss.new_scope();
for (i = 0; i < node->children.size(); ++i) { for (i = 0; i < node->children.size(); ++i) {
retval = eval_token(ss, node->children[i]); retval = eval_token(ss, node->children[i]);
} }
ss.pop_scope();
} }
break; break;
case (TokenType::Statement) : case (TokenType::Statement) :
@@ -360,7 +362,7 @@ Rule build_parser_rules() {
negate = Ign(Str("-")) >> boolean; negate = Ign(Str("-")) >> boolean;
return_statement = Ign(Str("return")) >> boolean; return_statement = Ign(Str("return")) >> boolean;
value = (Ign(Id(TokenType::Parens_Open)) >> boolean >> Ign(Id(TokenType::Parens_Close))) | return_statement | value = block | (Ign(Id(TokenType::Parens_Open)) >> boolean >> Ign(Id(TokenType::Parens_Close))) | return_statement |
funcall | Id(TokenType::Identifier) | Id(TokenType::Number) | Id(TokenType::Quoted_String) | Id(TokenType::Single_Quoted_String) ; funcall | Id(TokenType::Identifier) | Id(TokenType::Number) | Id(TokenType::Quoted_String) | Id(TokenType::Single_Quoted_String) ;
return rule; return rule;