Dump script line before bytecode (Only on host). Fix parsing literals: assing literal to temp before usage.
This commit is contained in:
+19
-1
@@ -178,6 +178,16 @@ get_char (size_t i)
|
|||||||
|
|
||||||
#define LA(I) (get_char (I))
|
#define LA(I) (get_char (I))
|
||||||
|
|
||||||
|
static void
|
||||||
|
dump_current_line (void)
|
||||||
|
{
|
||||||
|
const char *i;
|
||||||
|
|
||||||
|
for (i = buffer; *i != '\n' && *i != 0; i++)
|
||||||
|
__putchar (*i);
|
||||||
|
__putchar ('\n');
|
||||||
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
/* Represents the contents of a file. */
|
/* Represents the contents of a file. */
|
||||||
@@ -898,9 +908,17 @@ static int i = 0;
|
|||||||
token
|
token
|
||||||
lexer_next_token (void)
|
lexer_next_token (void)
|
||||||
{
|
{
|
||||||
|
LA (0); // Init buffers
|
||||||
|
|
||||||
|
if (buffer == buffer_start)
|
||||||
|
dump_current_line ();
|
||||||
|
|
||||||
token tok = lexer_next_token_private ();
|
token tok = lexer_next_token_private ();
|
||||||
if (tok.type == TOK_NEWLINE)
|
if (tok.type == TOK_NEWLINE)
|
||||||
return tok;
|
{
|
||||||
|
dump_current_line ();
|
||||||
|
return tok;
|
||||||
|
}
|
||||||
if (tok.type == TOK_CLOSE_BRACE)
|
if (tok.type == TOK_CLOSE_BRACE)
|
||||||
{
|
{
|
||||||
// if (i == 300)
|
// if (i == 300)
|
||||||
|
|||||||
+19
-11
@@ -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, strings_count;
|
static T_IDX temp_name, min_temp_name;
|
||||||
|
|
||||||
static T_IDX
|
static T_IDX
|
||||||
next_temp_name (void)
|
next_temp_name (void)
|
||||||
@@ -415,14 +415,6 @@ 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:
|
||||||
@@ -626,13 +618,30 @@ parse_object_literal (void)
|
|||||||
static T_IDX
|
static T_IDX
|
||||||
parse_literal (void)
|
parse_literal (void)
|
||||||
{
|
{
|
||||||
|
T_IDX lhs;
|
||||||
|
|
||||||
switch (tok.type)
|
switch (tok.type)
|
||||||
{
|
{
|
||||||
case TOK_NULL:
|
case TOK_NULL:
|
||||||
|
lhs = next_temp_name ();
|
||||||
|
DUMP_OPCODE (assignment, OPCODE_ARG_TYPE_SIMPLE, lhs, ECMA_SIMPLE_VALUE_NULL);
|
||||||
|
return lhs;
|
||||||
|
|
||||||
case TOK_BOOL:
|
case TOK_BOOL:
|
||||||
|
lhs = next_temp_name ();
|
||||||
|
DUMP_OPCODE (assignment, OPCODE_ARG_TYPE_SIMPLE, lhs,
|
||||||
|
tok.data.uid ? ECMA_SIMPLE_VALUE_TRUE : ECMA_SIMPLE_VALUE_FALSE);
|
||||||
|
return lhs;
|
||||||
|
|
||||||
case TOK_INT:
|
case TOK_INT:
|
||||||
|
lhs = next_temp_name ();
|
||||||
|
DUMP_OPCODE (assignment, OPCODE_ARG_TYPE_NUMBER, lhs, tok.data.uid);
|
||||||
|
return lhs;
|
||||||
|
|
||||||
case TOK_STRING:
|
case TOK_STRING:
|
||||||
return tok.data.uid;
|
lhs = next_temp_name ();
|
||||||
|
DUMP_OPCODE (assignment, OPCODE_ARG_TYPE_STRING, lhs, tok.data.uid);
|
||||||
|
return lhs;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
JERRY_UNREACHABLE ();
|
JERRY_UNREACHABLE ();
|
||||||
@@ -1820,7 +1829,6 @@ 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
|
||||||
|
|||||||
@@ -60,6 +60,8 @@ serializer_dump_nums (const int nums[], uint8_t size, uint8_t offset, uint8_t st
|
|||||||
__printf ("%3d %3d %7d\n", i + strings_num, offset, nums[i]);
|
__printf ("%3d %3d %7d\n", i + strings_num, offset, nums[i]);
|
||||||
offset = (uint8_t) (offset + 4);
|
offset = (uint8_t) (offset + 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__printf ("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static int opcode_counter = 0;
|
static int opcode_counter = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user