diff --git a/boxedcpp/boxedcpp.hpp b/boxedcpp/boxedcpp.hpp index 53a18c7..bcf7066 100644 --- a/boxedcpp/boxedcpp.hpp +++ b/boxedcpp/boxedcpp.hpp @@ -54,7 +54,7 @@ class BoxedCPP_System void pop_scope() { - if (m_scopes.size() == 1) + if (m_scopes.size() > 1) { m_scopes.pop_back(); } else { @@ -70,7 +70,7 @@ class BoxedCPP_System if (itr != m_scopes[i].end()) { return itr->second; - } + } } throw std::range_error("Object not known: " + name); diff --git a/wesley/main.cpp b/wesley/main.cpp index 1c062b0..57baa43 100644 --- a/wesley/main.cpp +++ b/wesley/main.cpp @@ -293,9 +293,11 @@ Boxed_Value eval_token(BoxedCPP_System &ss, TokenPtr node) { } break; case (TokenType::Scoped_Block) : { + ss.new_scope(); for (i = 0; i < node->children.size(); ++i) { retval = eval_token(ss, node->children[i]); } + ss.pop_scope(); } break; case (TokenType::Statement) : @@ -360,7 +362,7 @@ Rule build_parser_rules() { negate = Ign(Str("-")) >> 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) ; return rule;