Fix to equals sign, so that it dispatches

This commit is contained in:
Jonathan Turner 2009-06-10 15:15:35 +00:00
parent 9c1eeb52e7
commit 2bd05ccb76

View File

@ -318,26 +318,21 @@ Boxed_Value eval_token(BoxedCPP_System &ss, TokenPtr node) {
retval = eval_token(ss, node->children.back()); retval = eval_token(ss, node->children.back());
if (node->children.size() > 1) { if (node->children.size() > 1) {
for (i = node->children.size()-3; ((int)i) >= 0; i -= 2) { for (i = node->children.size()-3; ((int)i) >= 0; i -= 2) {
if ((node->children[i+1]->text == "=") && (node->children[i]->identifier == TokenType::Variable_Decl)) { Param_List_Builder plb;
//std::cout << "Setting: " << node->children[i]->text << std::endl; plb << eval_token(ss, node->children[i]);
ss.set_object(node->children[i]->children[0]->text, retval); plb << retval;
try {
retval = dispatch(ss.get_function(node->children[i+1]->text), plb);
} }
else { catch(std::exception &e){
Param_List_Builder plb; throw EvalError("Can not find appropriate '" + node->children[i+1]->text + "'", node->children[i+1]);
plb << eval_token(ss, node->children[i]);
plb << retval;
try {
retval = dispatch(ss.get_function(node->children[i+1]->text), plb);
}
catch(std::exception &e){
throw EvalError("Can not find appropriate '" + node->children[i+1]->text + "'", node->children[i+1]);
}
} }
} }
} }
break; break;
case (TokenType::Variable_Decl): { case (TokenType::Variable_Decl): {
ss.set_object(node->children[0]->text, Boxed_Value()); ss.set_object(node->children[0]->text, Boxed_Value());
retval = ss.get_object(node->children[0]->text);
} }
break; break;
case (TokenType::Factor) : case (TokenType::Factor) :
@ -641,6 +636,7 @@ TokenPtr parse(Rule &rule, std::vector<TokenPtr> &tokens, const char *filename)
} }
else { else {
throw ParserError("Parse failed to complete", *(results.first)); throw ParserError("Parse failed to complete", *(results.first));
//throw ParserError("Parse failed to complete at: " + (*(results.first))->text , *(results.first));
} }
} }