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