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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/lexer/lexer_py.re ('k') | tools/lexer_generator/code_generator_test.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 {%- else -%} 59 {%- else -%}
60 uncompilable code for {{encoding}} {{r[0]}} {{r[1]}} 60 uncompilable code for {{encoding}} {{r[0]}} {{r[1]}}
61 {%- endif -%} 61 {%- endif -%}
62 {%- else -%} 62 {%- else -%}
63 uncompilable code for {{encoding}} {{r[0]}} {{r[1]}} 63 uncompilable code for {{encoding}} {{r[0]}} {{r[1]}}
64 {%- endif -%} 64 {%- endif -%}
65 {%- endfor -%} 65 {%- endfor -%}
66 {%- endmacro -%} 66 {%- endmacro -%}
67 67
68 68
69 {#- entry actions must not change the value of the cursor -#} 69 {#- entry actions must not change the value of the cursor
70 unless they jump -#}
70 {% macro dispatch_entry_action(type, value) -%} 71 {% macro dispatch_entry_action(type, value) -%}
71 {%- if type == 'code' %} 72 {% if type == 'store_token' %}
72 {#- TODO(dcarney): in debug mode, verify cursor doesn't change -#}
73 {{value}}
74 {% elif type == 'store_token' %}
75 stored_token = Token::{{value}}; 73 stored_token = Token::{{value}};
76 {% elif type == 'set_marker' %} 74 {% elif type == 'set_marker' %}
77 marker_ = cursor_ - {{value}}; 75 marker_ = cursor_ - {{value}};
78 {% elif type == 'set_has_escapes' %} 76 {% elif type == 'set_has_escapes' %}
79 next_.has_escapes = true; 77 next_.has_escapes = true;
80 {% elif type == 'octal_inside_string' %} 78 {% elif type == 'octal_inside_string' %}
81 last_octal_end_ = cursor_; 79 last_octal_end_ = cursor_;
82 next_.has_escapes = true; 80 next_.has_escapes = true;
83 {% elif type == 'line_terminator_in_multiline_comment' %} 81 {% elif type == 'line_terminator_in_multiline_comment' %}
84 has_multiline_comment_before_next_ = true; 82 has_multiline_comment_before_next_ = true;
83 {% elif type == 'check_escaped_identifier_start' %}
84 if (!ValidIdentifierStart()) goto default_action;
85 next_.has_escapes = true;
86 {% elif type == 'check_escaped_identifier_part' %}
87 if (!ValidIdentifierPart()) goto default_action;
88 next_.has_escapes = true;
89 {% elif type == 'if_line_terminator_backtrack' %}
90 if (!has_line_terminator_before_next_) {
91 {{dispatch_match_action('backtrack', value)}}
92 }
85 {% else %} 93 {% else %}
86 uncompilable code for {{type}} 94 uncompilable code for {{type}} {{value}}
87 {% endif -%} 95 {% endif -%}
88 {%- endmacro -%} 96 {%- endmacro -%}
89 97
90 98
91 {#- match actions must all explicitly jump or return -#} 99 {#- match actions must all explicitly jump or return -#}
92 {% macro dispatch_match_action(type, value) -%} 100 {% macro dispatch_match_action(type, value) -%}
93 {%- if type == 'code' %} 101 {% if type == 'terminate' %}
94 {{value}}
95 CRASH()
96 {% elif type == 'terminate' %}
97 DO_EOS(); 102 DO_EOS();
98 return; 103 return;
99 {% elif type == 'terminate_illegal' %} 104 {% elif type == 'terminate_illegal' %}
100 start_ = marker_; 105 start_ = marker_;
101 BACKWARD(1); 106 BACKWARD(1);
102 DO_TOKEN(Token::ILLEGAL); 107 DO_TOKEN(Token::ILLEGAL);
103 return; 108 return;
104 {% elif type == 'skip' %} 109 {% elif type == 'skip' %}
105 SKIP(); 110 SKIP();
106 goto state_entry_0; 111 goto state_entry_0;
(...skipping 29 matching lines...) Expand all
136 if (harmony_{{value[0]}}_) { 141 if (harmony_{{value[0]}}_) {
137 stored_token = Token::{{value[1]}}; 142 stored_token = Token::{{value[1]}};
138 } else { 143 } else {
139 stored_token = Token::{{value[2]}}; 144 stored_token = Token::{{value[2]}};
140 } 145 }
141 goto after_entry_code_{{value[3]}}; 146 goto after_entry_code_{{value[3]}};
142 {% elif type == 'octal_number' %} 147 {% elif type == 'octal_number' %}
143 last_octal_end_ = cursor_; 148 last_octal_end_ = cursor_;
144 DO_TOKEN(Token::NUMBER); 149 DO_TOKEN(Token::NUMBER);
145 return; 150 return;
151 {% elif type == 'backtrack' %}
152 BACKWARD({{value[0]}});
153 DO_TOKEN(Token::{{value[1]}});
154 return;
146 {% else %} 155 {% else %}
147 uncompilable code for {{encoding}} 156 uncompilable code for {{type}} {{value}}
148 {% endif -%} 157 {% endif -%}
149 {%- endmacro -%} 158 {%- endmacro -%}
150 159
151 160
152 {%- macro long_char_check() -%} 161 {%- macro long_char_check() -%}
153 {%- if encoding == 'utf16'-%} 162 {%- if encoding == 'utf16'-%}
154 primary_char > {{upper_bound}} 163 primary_char > {{upper_bound}}
155 {%- elif encoding == 'utf8'-%} 164 {%- elif encoding == 'utf8'-%}
156 primary_char < 0 165 primary_char < 0
157 {%- else -%} 166 {%- else -%}
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 {{ do_transition(transition_state_id) }} 266 {{ do_transition(transition_state_id) }}
258 } 267 }
259 {% endfor -%} 268 {% endfor -%}
260 } 269 }
261 {%- endif-%} 270 {%- endif-%}
262 271
263 {%- set match_action = state.match_action -%} 272 {%- set match_action = state.match_action -%}
264 273
265 {%- if match_action %} 274 {%- if match_action %}
266 {{ dispatch_match_action(match_action[0], match_action[1]) }} 275 {{ dispatch_match_action(match_action[0], match_action[1]) }}
267 CRASH() 276 CRASH();
268 {% else %} 277 {% else %}
269 goto default_action; 278 goto default_action;
270 {%- endif %} 279 {%- endif %}
271 280
272 {%- endmacro %} 281 {%- endmacro %}
273 282
274 #include "lexer/experimental-scanner.h" 283 #include "lexer/experimental-scanner.h"
275 284
276 #define PREPARE_TOKEN() { \ 285 #define PREPARE_TOKEN() { \
277 next_.beg_pos = start_ - buffer_; \ 286 next_.beg_pos = start_ - buffer_; \
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 {{ do_dfa_state([dfa_state['node_number']]) }} 348 {{ do_dfa_state([dfa_state['node_number']]) }}
340 {%- endif -%} 349 {%- endif -%}
341 {%- endfor %} 350 {%- endfor %}
342 351
343 // Execute the default action. 352 // Execute the default action.
344 default_action: 353 default_action:
345 {%- if debug_print %} 354 {%- if debug_print %}
346 fprintf(stderr, "default action\n"); 355 fprintf(stderr, "default action\n");
347 {% endif -%} 356 {% endif -%}
348 {{dispatch_match_action(default_action[0], default_action[1])}} 357 {{dispatch_match_action(default_action[0], default_action[1])}}
349 CRASH() 358 CRASH();
350 359
351 if (false) { 360 if (false) {
352 // force use of stored_token 361 // force use of stored_token
353 stored_token = Token::ILLEGAL; 362 stored_token = Token::ILLEGAL;
354 // force use of state_entry_0 363 // force use of state_entry_0
355 goto state_entry_0; 364 goto state_entry_0;
356 } 365 }
357 } 366 }
358 } } 367 } }
359 368
OLDNEW
« 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