Num literals outside of assignments (in lists) are not allowed
This commit is contained in:
@@ -35,7 +35,7 @@ static void parse_statement (void);
|
|||||||
static T_IDX parse_assignment_expression (void);
|
static T_IDX parse_assignment_expression (void);
|
||||||
static void parse_source_element_list (void);
|
static void parse_source_element_list (void);
|
||||||
|
|
||||||
static T_IDX temp_name, min_temp_name;
|
static T_IDX temp_name, min_temp_name, strings_count;
|
||||||
|
|
||||||
static T_IDX
|
static T_IDX
|
||||||
next_temp_name (void)
|
next_temp_name (void)
|
||||||
@@ -415,6 +415,14 @@ parse_argument_list (argument_list_type alt, T_IDX obj)
|
|||||||
case AL_CONSTRUCT_EXPR:
|
case AL_CONSTRUCT_EXPR:
|
||||||
case AL_CALL_EXPR:
|
case AL_CALL_EXPR:
|
||||||
args[current_arg] = parse_assignment_expression ();
|
args[current_arg] = parse_assignment_expression ();
|
||||||
|
/* it's num literal. */
|
||||||
|
if (strings_count < args[current_arg]
|
||||||
|
&& args[current_arg] < min_temp_name)
|
||||||
|
{
|
||||||
|
T_IDX lhs = next_temp_name ();
|
||||||
|
DUMP_OPCODE (assignment, OPCODE_ARG_TYPE_NUMBER, lhs, args[current_arg]);
|
||||||
|
args[current_arg] = lhs;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AL_OBJECT_LIT:
|
case AL_OBJECT_LIT:
|
||||||
@@ -1812,6 +1820,7 @@ void
|
|||||||
parser_init (void)
|
parser_init (void)
|
||||||
{
|
{
|
||||||
temp_name = min_temp_name = lexer_get_reserved_ids_count ();
|
temp_name = min_temp_name = lexer_get_reserved_ids_count ();
|
||||||
|
strings_count = lexer_get_strings (NULL);
|
||||||
#ifdef __HOST
|
#ifdef __HOST
|
||||||
debug_file = __fopen ("parser.log", "w");
|
debug_file = __fopen ("parser.log", "w");
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user