Fix insert_semicolon
This commit is contained in:
@@ -25,6 +25,8 @@ nbproject
|
||||
*.swp
|
||||
*~
|
||||
js.files
|
||||
jerry.error
|
||||
jerry.passed
|
||||
core
|
||||
vgcore.*
|
||||
**.orig
|
||||
|
||||
+25
-18
@@ -20,7 +20,7 @@
|
||||
#include "stack.h"
|
||||
#include "opcodes.h"
|
||||
|
||||
static token saved_token;
|
||||
static token saved_token, prev_token, sent_token;
|
||||
static token empty_token =
|
||||
{
|
||||
.type = TOK_EMPTY,
|
||||
@@ -1233,16 +1233,17 @@ lexer_next_token (void)
|
||||
}
|
||||
#endif /* __TARGET_HOST_x64 */
|
||||
|
||||
token tok = lexer_next_token_private ();
|
||||
prev_token = sent_token;
|
||||
sent_token = lexer_next_token_private ();
|
||||
|
||||
#ifdef __TARGET_HOST_x64
|
||||
if (tok.type == TOK_NEWLINE)
|
||||
if (sent_token.type == TOK_NEWLINE)
|
||||
{
|
||||
dump_current_line ();
|
||||
return tok;
|
||||
return sent_token;
|
||||
}
|
||||
#endif /* __TARGET_HOST_x64 */
|
||||
return tok;
|
||||
return sent_token;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1251,25 +1252,18 @@ lexer_save_token (token tok)
|
||||
saved_token = tok;
|
||||
}
|
||||
|
||||
token
|
||||
lexer_prev_token (void)
|
||||
{
|
||||
return prev_token;
|
||||
}
|
||||
|
||||
void
|
||||
lexer_dump_buffer_state (void)
|
||||
{
|
||||
__printf ("%s\n", buffer);
|
||||
}
|
||||
|
||||
void
|
||||
lexer_init (const char *source, size_t source_size, bool show_opcodes)
|
||||
{
|
||||
saved_token = empty_token;
|
||||
allow_dump_lines = show_opcodes;
|
||||
buffer_size = source_size;
|
||||
lexer_set_source (source);
|
||||
|
||||
STACK_INIT (lp_string, strings);
|
||||
STACK_INIT (ecma_number_t, numbers);
|
||||
STACK_INIT (idx_t, num_ids);
|
||||
}
|
||||
|
||||
void
|
||||
lexer_run_first_pass (void)
|
||||
{
|
||||
@@ -1282,6 +1276,19 @@ lexer_run_first_pass (void)
|
||||
lexer_rewind ();
|
||||
}
|
||||
|
||||
void
|
||||
lexer_init (const char *source, size_t source_size, bool show_opcodes)
|
||||
{
|
||||
saved_token = prev_token = sent_token = empty_token;
|
||||
allow_dump_lines = show_opcodes;
|
||||
buffer_size = source_size;
|
||||
lexer_set_source (source);
|
||||
|
||||
STACK_INIT (lp_string, strings);
|
||||
STACK_INIT (ecma_number_t, numbers);
|
||||
STACK_INIT (idx_t, num_ids);
|
||||
}
|
||||
|
||||
void
|
||||
lexer_free (void)
|
||||
{
|
||||
|
||||
@@ -152,6 +152,7 @@ void lexer_run_first_pass (void);
|
||||
|
||||
token lexer_next_token (void);
|
||||
void lexer_save_token (token);
|
||||
token lexer_prev_token (void);
|
||||
|
||||
void lexer_dump_buffer_state (void);
|
||||
|
||||
|
||||
@@ -2764,9 +2764,16 @@ parse_try_statement (void)
|
||||
static void
|
||||
insert_semicolon (void)
|
||||
{
|
||||
TODO (/*Uncomment when skip_newlines will be fixed. */)
|
||||
// skip_token ();
|
||||
// JERRY_ASSERT (token_is (TOK_SEMICOLON) || token_is (TOK_NEWLINE));
|
||||
// We cannot use TOK (), since we may use lexer_save_token
|
||||
skip_token ();
|
||||
if (lexer_prev_token ().type == TOK_NEWLINE)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (!token_is (TOK_SEMICOLON))
|
||||
{
|
||||
parser_fatal (ERR_PARSER);
|
||||
}
|
||||
}
|
||||
|
||||
/* statement
|
||||
|
||||
Reference in New Issue
Block a user