Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(92)

Unified Diff: tools/lexer_generator/code_generator.jinja

Issue 135053003: Experimental parser: remove inline code from lexer rules (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/parser
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/lexer/lexer_py.re ('k') | tools/lexer_generator/code_generator_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/lexer_generator/code_generator.jinja
diff --git a/tools/lexer_generator/code_generator.jinja b/tools/lexer_generator/code_generator.jinja
index 37fd0854f7bce637c842e40cb9db839ab97f0ef9..37b0870fa7949edf55d99794a30ca18f6c2c4c2b 100644
--- a/tools/lexer_generator/code_generator.jinja
+++ b/tools/lexer_generator/code_generator.jinja
@@ -66,12 +66,10 @@
{%- endmacro -%}
-{#- entry actions must not change the value of the cursor -#}
+{#- entry actions must not change the value of the cursor
+ unless they jump -#}
{% macro dispatch_entry_action(type, value) -%}
- {%- if type == 'code' %}
- {#- TODO(dcarney): in debug mode, verify cursor doesn't change -#}
- {{value}}
- {% elif type == 'store_token' %}
+ {% if type == 'store_token' %}
stored_token = Token::{{value}};
{% elif type == 'set_marker' %}
marker_ = cursor_ - {{value}};
@@ -82,18 +80,25 @@
next_.has_escapes = true;
{% elif type == 'line_terminator_in_multiline_comment' %}
has_multiline_comment_before_next_ = true;
+ {% elif type == 'check_escaped_identifier_start' %}
+ if (!ValidIdentifierStart()) goto default_action;
+ next_.has_escapes = true;
+ {% elif type == 'check_escaped_identifier_part' %}
+ if (!ValidIdentifierPart()) goto default_action;
+ next_.has_escapes = true;
+ {% elif type == 'if_line_terminator_backtrack' %}
+ if (!has_line_terminator_before_next_) {
+ {{dispatch_match_action('backtrack', value)}}
+ }
{% else %}
- uncompilable code for {{type}}
+ uncompilable code for {{type}} {{value}}
{% endif -%}
{%- endmacro -%}
{#- match actions must all explicitly jump or return -#}
{% macro dispatch_match_action(type, value) -%}
- {%- if type == 'code' %}
- {{value}}
- CRASH()
- {% elif type == 'terminate' %}
+ {% if type == 'terminate' %}
DO_EOS();
return;
{% elif type == 'terminate_illegal' %}
@@ -143,8 +148,12 @@
last_octal_end_ = cursor_;
DO_TOKEN(Token::NUMBER);
return;
+ {% elif type == 'backtrack' %}
+ BACKWARD({{value[0]}});
+ DO_TOKEN(Token::{{value[1]}});
+ return;
{% else %}
- uncompilable code for {{encoding}}
+ uncompilable code for {{type}} {{value}}
{% endif -%}
{%- endmacro -%}
@@ -264,7 +273,7 @@
{%- if match_action %}
{{ dispatch_match_action(match_action[0], match_action[1]) }}
- CRASH()
+ CRASH();
{% else %}
goto default_action;
{%- endif %}
@@ -346,7 +355,7 @@ void ExperimentalScanner<{{char_type}}>::Scan() {
fprintf(stderr, "default action\n");
{% endif -%}
{{dispatch_match_action(default_action[0], default_action[1])}}
- CRASH()
+ CRASH();
if (false) {
// force use of stored_token
« no previous file with comments | « src/lexer/lexer_py.re ('k') | tools/lexer_generator/code_generator_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698