Fix insert_semicolon

This commit is contained in:
Ilmir Usmanov
2014-10-02 21:35:39 +04:00
parent af00691d1d
commit c4c713535e
4 changed files with 38 additions and 21 deletions
+2
View File
@@ -25,6 +25,8 @@ nbproject
*.swp *.swp
*~ *~
js.files js.files
jerry.error
jerry.passed
core core
vgcore.* vgcore.*
**.orig **.orig
+25 -18
View File
@@ -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)
{ {
+1
View File
@@ -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);
+10 -3
View File
@@ -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