Added attribute sugar for object attributes
This commit is contained in:
@@ -173,7 +173,7 @@ namespace chaiscript
|
|||||||
Id(TokenType::Single_Quoted_String) ;
|
Id(TokenType::Single_Quoted_String) ;
|
||||||
|
|
||||||
funcall = Id(TokenType::Identifier) >> Ign(Id(TokenType::Parens_Open)) >> ~(boolean >> *(Ign(Str("," )) >> boolean)) >> Ign(Id(TokenType::Parens_Close));
|
funcall = Id(TokenType::Identifier) >> Ign(Id(TokenType::Parens_Open)) >> ~(boolean >> *(Ign(Str("," )) >> boolean)) >> Ign(Id(TokenType::Parens_Close));
|
||||||
methodcall = value >> +(Ign(Str(".")) >> funcall);
|
methodcall = value >> +(Ign(Str(".")) >> (funcall | Id(TokenType::Identifier)));
|
||||||
negate = (Str("-") >> (boolean | arraycall));
|
negate = (Str("-") >> (boolean | arraycall));
|
||||||
boolean_not = (Str("!") >> (boolean | arraycall));
|
boolean_not = (Str("!") >> (boolean | arraycall));
|
||||||
prefix = (Str("++") >> (boolean | arraycall)) | (Str("--") >> (boolean | arraycall));
|
prefix = (Str("++") >> (boolean | arraycall)) | (Str("--") >> (boolean | arraycall));
|
||||||
|
@@ -274,19 +274,27 @@ namespace chaiscript
|
|||||||
plb << eval_token(ss, node->children[i]->children[j]);
|
plb << eval_token(ss, node->children[i]->children[j]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string fun_name;
|
||||||
|
if (node->children[i]->identifier == TokenType::Fun_Call) {
|
||||||
|
fun_name = node->children[i]->children[0]->text;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fun_name = node->children[i]->text;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
fn = ss.get_function(node->children[i]->children[0]->text);
|
fn = ss.get_function(fun_name);
|
||||||
ss.set_stack(new_stack);
|
ss.set_stack(new_stack);
|
||||||
retval = dispatch(fn, plb);
|
retval = dispatch(fn, plb);
|
||||||
ss.set_stack(prev_stack);
|
ss.set_stack(prev_stack);
|
||||||
}
|
}
|
||||||
catch(EvalError &ee) {
|
catch(EvalError &ee) {
|
||||||
ss.set_stack(prev_stack);
|
ss.set_stack(prev_stack);
|
||||||
throw EvalError(ee.reason, node->children[0]);
|
throw EvalError(ee.reason, node);
|
||||||
}
|
}
|
||||||
catch(std::exception &e){
|
catch(std::exception &e){
|
||||||
ss.set_stack(prev_stack);
|
ss.set_stack(prev_stack);
|
||||||
throw EvalError("Can not find appropriate '" + node->children[i]->children[0]->text + "'", node->children[0]);
|
throw EvalError("Can not find appropriate '" + fun_name + "'", node);
|
||||||
}
|
}
|
||||||
catch(ReturnValue &rv) {
|
catch(ReturnValue &rv) {
|
||||||
ss.set_stack(prev_stack);
|
ss.set_stack(prev_stack);
|
||||||
|
Reference in New Issue
Block a user