Fix to disallow mixing inline map and array elements
This commit is contained in:
@@ -1098,6 +1098,19 @@ namespace chaiscript
|
|||||||
}
|
}
|
||||||
build_match(AST_NodePtr(new Arg_List_AST_Node()), prev_stack_top);
|
build_match(AST_NodePtr(new Arg_List_AST_Node()), prev_stack_top);
|
||||||
}
|
}
|
||||||
|
else if (Operator()) {
|
||||||
|
retval = true;
|
||||||
|
while (Eol()) {}
|
||||||
|
if (Char(',')) {
|
||||||
|
do {
|
||||||
|
while (Eol()) {}
|
||||||
|
if (!Operator()) {
|
||||||
|
throw Eval_Error("Unexpected value in container", File_Position(line, col), filename);
|
||||||
|
}
|
||||||
|
} while (retval && Char(','));
|
||||||
|
}
|
||||||
|
build_match(AST_NodePtr(new Arg_List_AST_Node()), prev_stack_top);
|
||||||
|
}
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
@@ -1745,19 +1758,26 @@ namespace chaiscript
|
|||||||
bool Map_Pair() {
|
bool Map_Pair() {
|
||||||
bool retval = false;
|
bool retval = false;
|
||||||
|
|
||||||
int prev_stack_top = match_stack.size();
|
size_t prev_stack_top = match_stack.size();
|
||||||
|
std::string::const_iterator prev_pos = input_pos;
|
||||||
|
int prev_col = col;
|
||||||
|
|
||||||
if (Operator()) {
|
if (Operator()) {
|
||||||
retval = true;
|
|
||||||
if (Symbol(":")) {
|
if (Symbol(":")) {
|
||||||
do {
|
retval = true;
|
||||||
if (!Operator()) {
|
if (!Operator()) {
|
||||||
throw Eval_Error("Incomplete map pair", File_Position(line, col), filename);
|
throw Eval_Error("Incomplete map pair", File_Position(line, col), filename);
|
||||||
}
|
}
|
||||||
} while (retval && Symbol(":"));
|
|
||||||
|
|
||||||
build_match(AST_NodePtr(new Map_Pair_AST_Node()), prev_stack_top);
|
build_match(AST_NodePtr(new Map_Pair_AST_Node()), prev_stack_top);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
input_pos = prev_pos;
|
||||||
|
col = prev_col;
|
||||||
|
while (prev_stack_top != match_stack.size()) {
|
||||||
|
match_stack.pop_back();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
|
Reference in New Issue
Block a user