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

Side by Side Diff: src/preparser.h

Issue 490173002: Take ast node id counting away from Isolate. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: . Created 6 years, 4 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
« src/ast.h ('K') | « src/parser.cc ('k') | src/rewriter.cc » ('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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_PREPARSER_H 5 #ifndef V8_PREPARSER_H
6 #define V8_PREPARSER_H 6 #define V8_PREPARSER_H
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/func-name-inferrer.h" 10 #include "src/func-name-inferrer.h"
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 public: 61 public:
62 // Shorten type names defined by Traits. 62 // Shorten type names defined by Traits.
63 typedef typename Traits::Type::Expression ExpressionT; 63 typedef typename Traits::Type::Expression ExpressionT;
64 typedef typename Traits::Type::Identifier IdentifierT; 64 typedef typename Traits::Type::Identifier IdentifierT;
65 typedef typename Traits::Type::FunctionLiteral FunctionLiteralT; 65 typedef typename Traits::Type::FunctionLiteral FunctionLiteralT;
66 typedef typename Traits::Type::Literal LiteralT; 66 typedef typename Traits::Type::Literal LiteralT;
67 typedef typename Traits::Type::ObjectLiteralProperty ObjectLiteralPropertyT; 67 typedef typename Traits::Type::ObjectLiteralProperty ObjectLiteralPropertyT;
68 68
69 ParserBase(Scanner* scanner, uintptr_t stack_limit, v8::Extension* extension, 69 ParserBase(Scanner* scanner, uintptr_t stack_limit, v8::Extension* extension,
70 ParserRecorder* log, typename Traits::Type::Zone* zone, 70 ParserRecorder* log, typename Traits::Type::Zone* zone,
71 int* ast_node_id_counter,
71 typename Traits::Type::Parser this_object) 72 typename Traits::Type::Parser this_object)
72 : Traits(this_object), 73 : Traits(this_object),
73 parenthesized_function_(false), 74 parenthesized_function_(false),
74 scope_(NULL), 75 scope_(NULL),
75 function_state_(NULL), 76 function_state_(NULL),
76 extension_(extension), 77 extension_(extension),
77 fni_(NULL), 78 fni_(NULL),
78 log_(log), 79 log_(log),
79 mode_(PARSE_EAGERLY), // Lazy mode must be set explicitly. 80 mode_(PARSE_EAGERLY), // Lazy mode must be set explicitly.
80 scanner_(scanner), 81 scanner_(scanner),
81 stack_limit_(stack_limit), 82 stack_limit_(stack_limit),
82 stack_overflow_(false), 83 stack_overflow_(false),
83 allow_lazy_(false), 84 allow_lazy_(false),
84 allow_natives_syntax_(false), 85 allow_natives_syntax_(false),
85 allow_generators_(false), 86 allow_generators_(false),
86 allow_arrow_functions_(false), 87 allow_arrow_functions_(false),
87 zone_(zone) {} 88 zone_(zone),
89 ast_node_id_counter_(ast_node_id_counter) {}
88 90
89 // Getters that indicate whether certain syntactical constructs are 91 // Getters that indicate whether certain syntactical constructs are
90 // allowed to be parsed by this instance of the parser. 92 // allowed to be parsed by this instance of the parser.
91 bool allow_lazy() const { return allow_lazy_; } 93 bool allow_lazy() const { return allow_lazy_; }
92 bool allow_natives_syntax() const { return allow_natives_syntax_; } 94 bool allow_natives_syntax() const { return allow_natives_syntax_; }
93 bool allow_generators() const { return allow_generators_; } 95 bool allow_generators() const { return allow_generators_; }
94 bool allow_arrow_functions() const { return allow_arrow_functions_; } 96 bool allow_arrow_functions() const { return allow_arrow_functions_; }
95 bool allow_modules() const { return scanner()->HarmonyModules(); } 97 bool allow_modules() const { return scanner()->HarmonyModules(); }
96 bool allow_harmony_scoping() const { return scanner()->HarmonyScoping(); } 98 bool allow_harmony_scoping() const { return scanner()->HarmonyScoping(); }
97 bool allow_harmony_numeric_literals() const { 99 bool allow_harmony_numeric_literals() const {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 ~BlockState() { *scope_stack_ = outer_scope_; } 150 ~BlockState() { *scope_stack_ = outer_scope_; }
149 151
150 private: 152 private:
151 typename Traits::Type::Scope** scope_stack_; 153 typename Traits::Type::Scope** scope_stack_;
152 typename Traits::Type::Scope* outer_scope_; 154 typename Traits::Type::Scope* outer_scope_;
153 typename Traits::Type::Scope* scope_; 155 typename Traits::Type::Scope* scope_;
154 }; 156 };
155 157
156 class FunctionState BASE_EMBEDDED { 158 class FunctionState BASE_EMBEDDED {
157 public: 159 public:
158 FunctionState( 160 FunctionState(FunctionState** function_state_stack,
159 FunctionState** function_state_stack, 161 typename Traits::Type::Scope** scope_stack,
160 typename Traits::Type::Scope** scope_stack, 162 typename Traits::Type::Scope* scope,
161 typename Traits::Type::Scope* scope, 163 typename Traits::Type::Zone* zone = NULL,
162 typename Traits::Type::Zone* zone = NULL, 164 AstValueFactory* ast_value_factory = NULL,
163 AstValueFactory* ast_value_factory = NULL); 165 int* ast_node_id_counter = NULL);
164 FunctionState(FunctionState** function_state_stack, 166 FunctionState(FunctionState** function_state_stack,
165 typename Traits::Type::Scope** scope_stack, 167 typename Traits::Type::Scope** scope_stack,
166 typename Traits::Type::Scope** scope, 168 typename Traits::Type::Scope** scope,
167 typename Traits::Type::Zone* zone = NULL, 169 typename Traits::Type::Zone* zone = NULL,
168 AstValueFactory* ast_value_factory = NULL); 170 AstValueFactory* ast_value_factory = NULL,
171 int* ast_node_id_counter = NULL);
169 ~FunctionState(); 172 ~FunctionState();
170 173
171 int NextMaterializedLiteralIndex() { 174 int NextMaterializedLiteralIndex() {
172 return next_materialized_literal_index_++; 175 return next_materialized_literal_index_++;
173 } 176 }
174 int materialized_literal_count() { 177 int materialized_literal_count() {
175 return next_materialized_literal_index_ - JSFunction::kLiteralsPrefixSize; 178 return next_materialized_literal_index_ - JSFunction::kLiteralsPrefixSize;
176 } 179 }
177 180
178 int NextHandlerIndex() { return next_handler_index_++; } 181 int NextHandlerIndex() { return next_handler_index_++; }
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 // For generators, this variable may hold the generator object. It variable 218 // For generators, this variable may hold the generator object. It variable
216 // is used by yield expressions and return statements. It is not necessary 219 // is used by yield expressions and return statements. It is not necessary
217 // for generator functions to have this variable set. 220 // for generator functions to have this variable set.
218 Variable* generator_object_variable_; 221 Variable* generator_object_variable_;
219 222
220 FunctionState** function_state_stack_; 223 FunctionState** function_state_stack_;
221 FunctionState* outer_function_state_; 224 FunctionState* outer_function_state_;
222 typename Traits::Type::Scope** scope_stack_; 225 typename Traits::Type::Scope** scope_stack_;
223 typename Traits::Type::Scope* outer_scope_; 226 typename Traits::Type::Scope* outer_scope_;
224 int saved_ast_node_id_; // Only used by ParserTraits. 227 int saved_ast_node_id_; // Only used by ParserTraits.
228 int* ast_node_id_counter_; // Ditto.
225 typename Traits::Type::Zone* extra_param_; 229 typename Traits::Type::Zone* extra_param_;
226 typename Traits::Type::Factory factory_; 230 typename Traits::Type::Factory factory_;
227 231
228 friend class ParserTraits; 232 friend class ParserTraits;
229 friend class CheckpointBase; 233 friend class CheckpointBase;
230 }; 234 };
231 235
232 // Annoyingly, arrow functions first parse as comma expressions, then when we 236 // Annoyingly, arrow functions first parse as comma expressions, then when we
233 // see the => we have to go back and reinterpret the arguments as being formal 237 // see the => we have to go back and reinterpret the arguments as being formal
234 // parameters. To do so we need to reset some of the parser state back to 238 // parameters. To do so we need to reset some of the parser state back to
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 Mode old_mode_; 277 Mode old_mode_;
274 }; 278 };
275 279
276 Scanner* scanner() const { return scanner_; } 280 Scanner* scanner() const { return scanner_; }
277 int position() { return scanner_->location().beg_pos; } 281 int position() { return scanner_->location().beg_pos; }
278 int peek_position() { return scanner_->peek_location().beg_pos; } 282 int peek_position() { return scanner_->peek_location().beg_pos; }
279 bool stack_overflow() const { return stack_overflow_; } 283 bool stack_overflow() const { return stack_overflow_; }
280 void set_stack_overflow() { stack_overflow_ = true; } 284 void set_stack_overflow() { stack_overflow_ = true; }
281 Mode mode() const { return mode_; } 285 Mode mode() const { return mode_; }
282 typename Traits::Type::Zone* zone() const { return zone_; } 286 typename Traits::Type::Zone* zone() const { return zone_; }
287 int* ast_node_id_counter() const { return ast_node_id_counter_; }
283 288
284 INLINE(Token::Value peek()) { 289 INLINE(Token::Value peek()) {
285 if (stack_overflow_) return Token::ILLEGAL; 290 if (stack_overflow_) return Token::ILLEGAL;
286 return scanner()->peek(); 291 return scanner()->peek();
287 } 292 }
288 293
289 INLINE(Token::Value Next()) { 294 INLINE(Token::Value Next()) {
290 if (stack_overflow_) return Token::ILLEGAL; 295 if (stack_overflow_) return Token::ILLEGAL;
291 { 296 {
292 if (GetCurrentStackPosition() < stack_limit_) { 297 if (GetCurrentStackPosition() < stack_limit_) {
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 Scanner* scanner_; 518 Scanner* scanner_;
514 uintptr_t stack_limit_; 519 uintptr_t stack_limit_;
515 bool stack_overflow_; 520 bool stack_overflow_;
516 521
517 bool allow_lazy_; 522 bool allow_lazy_;
518 bool allow_natives_syntax_; 523 bool allow_natives_syntax_;
519 bool allow_generators_; 524 bool allow_generators_;
520 bool allow_arrow_functions_; 525 bool allow_arrow_functions_;
521 526
522 typename Traits::Type::Zone* zone_; // Only used by Parser. 527 typename Traits::Type::Zone* zone_; // Only used by Parser.
528 int* ast_node_id_counter_;
523 }; 529 };
524 530
525 531
526 class PreParserIdentifier { 532 class PreParserIdentifier {
527 public: 533 public:
528 PreParserIdentifier() : type_(kUnknownIdentifier) {} 534 PreParserIdentifier() : type_(kUnknownIdentifier) {}
529 static PreParserIdentifier Default() { 535 static PreParserIdentifier Default() {
530 return PreParserIdentifier(kUnknownIdentifier); 536 return PreParserIdentifier(kUnknownIdentifier);
531 } 537 }
532 static PreParserIdentifier Eval() { 538 static PreParserIdentifier Eval() {
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
877 PreParserScope* operator->() { return this; } 883 PreParserScope* operator->() { return this; }
878 884
879 private: 885 private:
880 ScopeType scope_type_; 886 ScopeType scope_type_;
881 StrictMode strict_mode_; 887 StrictMode strict_mode_;
882 }; 888 };
883 889
884 890
885 class PreParserFactory { 891 class PreParserFactory {
886 public: 892 public:
887 explicit PreParserFactory(void* extra_param1, void* extra_param2) {} 893 PreParserFactory(void*, void*, void*) {}
888 PreParserExpression NewStringLiteral(PreParserIdentifier identifier, 894 PreParserExpression NewStringLiteral(PreParserIdentifier identifier,
889 int pos) { 895 int pos) {
890 return PreParserExpression::Default(); 896 return PreParserExpression::Default();
891 } 897 }
892 PreParserExpression NewNumberLiteral(double number, 898 PreParserExpression NewNumberLiteral(double number,
893 int pos) { 899 int pos) {
894 return PreParserExpression::Default(); 900 return PreParserExpression::Default();
895 } 901 }
896 PreParserExpression NewRegExpLiteral(PreParserIdentifier js_pattern, 902 PreParserExpression NewRegExpLiteral(PreParserIdentifier js_pattern,
897 PreParserIdentifier js_flags, 903 PreParserIdentifier js_flags,
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
1043 // For constructing objects returned by the traversing functions. 1049 // For constructing objects returned by the traversing functions.
1044 typedef PreParserFactory Factory; 1050 typedef PreParserFactory Factory;
1045 }; 1051 };
1046 1052
1047 class Checkpoint; 1053 class Checkpoint;
1048 1054
1049 explicit PreParserTraits(PreParser* pre_parser) : pre_parser_(pre_parser) {} 1055 explicit PreParserTraits(PreParser* pre_parser) : pre_parser_(pre_parser) {}
1050 1056
1051 // Custom operations executed when FunctionStates are created and 1057 // Custom operations executed when FunctionStates are created and
1052 // destructed. (The PreParser doesn't need to do anything.) 1058 // destructed. (The PreParser doesn't need to do anything.)
1053 template<typename FunctionState> 1059 template <typename FunctionState>
1054 static void SetUpFunctionState(FunctionState* function_state, void*) {} 1060 static void SetUpFunctionState(FunctionState* function_state) {}
1055 template<typename FunctionState> 1061 template <typename FunctionState>
1056 static void TearDownFunctionState(FunctionState* function_state, void*) {} 1062 static void TearDownFunctionState(FunctionState* function_state) {}
1057 1063
1058 // Helper functions for recursive descent. 1064 // Helper functions for recursive descent.
1059 static bool IsEvalOrArguments(PreParserIdentifier identifier) { 1065 static bool IsEvalOrArguments(PreParserIdentifier identifier) {
1060 return identifier.IsEvalOrArguments(); 1066 return identifier.IsEvalOrArguments();
1061 } 1067 }
1062 1068
1063 // Returns true if the expression is of type "this.foo". 1069 // Returns true if the expression is of type "this.foo".
1064 static bool IsThisProperty(PreParserExpression expression) { 1070 static bool IsThisProperty(PreParserExpression expression) {
1065 return expression.IsThisProperty(); 1071 return expression.IsThisProperty();
1066 } 1072 }
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
1299 typedef PreParserIdentifier Identifier; 1305 typedef PreParserIdentifier Identifier;
1300 typedef PreParserExpression Expression; 1306 typedef PreParserExpression Expression;
1301 typedef PreParserStatement Statement; 1307 typedef PreParserStatement Statement;
1302 1308
1303 enum PreParseResult { 1309 enum PreParseResult {
1304 kPreParseStackOverflow, 1310 kPreParseStackOverflow,
1305 kPreParseSuccess 1311 kPreParseSuccess
1306 }; 1312 };
1307 1313
1308 PreParser(Scanner* scanner, ParserRecorder* log, uintptr_t stack_limit) 1314 PreParser(Scanner* scanner, ParserRecorder* log, uintptr_t stack_limit)
1309 : ParserBase<PreParserTraits>(scanner, stack_limit, NULL, log, NULL, 1315 : ParserBase<PreParserTraits>(scanner, stack_limit, NULL, log, NULL, NULL,
1310 this) {} 1316 this) {}
1311 1317
1312 // Pre-parse the program from the character stream; returns true on 1318 // Pre-parse the program from the character stream; returns true on
1313 // success (even if parsing failed, the pre-parse data successfully 1319 // success (even if parsing failed, the pre-parse data successfully
1314 // captured the syntax error), and false if a stack-overflow happened 1320 // captured the syntax error), and false if a stack-overflow happened
1315 // during parsing. 1321 // during parsing.
1316 PreParseResult PreParseProgram() { 1322 PreParseResult PreParseProgram() {
1317 PreParserScope scope(scope_, GLOBAL_SCOPE); 1323 PreParserScope scope(scope_, GLOBAL_SCOPE);
1318 FunctionState top_scope(&function_state_, &scope_, &scope); 1324 FunctionState top_scope(&function_state_, &scope_, &scope);
1319 bool ok = true; 1325 bool ok = true;
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
1434 1440
1435 1441
1436 PreParserStatementList PreParserTraits::ParseEagerFunctionBody( 1442 PreParserStatementList PreParserTraits::ParseEagerFunctionBody(
1437 PreParserIdentifier function_name, int pos, Variable* fvar, 1443 PreParserIdentifier function_name, int pos, Variable* fvar,
1438 Token::Value fvar_init_op, bool is_generator, bool* ok) { 1444 Token::Value fvar_init_op, bool is_generator, bool* ok) {
1439 return pre_parser_->ParseEagerFunctionBody(function_name, pos, fvar, 1445 return pre_parser_->ParseEagerFunctionBody(function_name, pos, fvar,
1440 fvar_init_op, is_generator, ok); 1446 fvar_init_op, is_generator, ok);
1441 } 1447 }
1442 1448
1443 1449
1444 template<class Traits> 1450 template <class Traits>
1445 ParserBase<Traits>::FunctionState::FunctionState( 1451 ParserBase<Traits>::FunctionState::FunctionState(
1446 FunctionState** function_state_stack, 1452 FunctionState** function_state_stack,
1447 typename Traits::Type::Scope** scope_stack, 1453 typename Traits::Type::Scope** scope_stack,
1448 typename Traits::Type::Scope* scope, 1454 typename Traits::Type::Scope* scope, typename Traits::Type::Zone* zone,
1449 typename Traits::Type::Zone* extra_param, 1455 AstValueFactory* ast_value_factory, int* ast_node_id_counter)
1450 AstValueFactory* ast_value_factory)
1451 : next_materialized_literal_index_(JSFunction::kLiteralsPrefixSize), 1456 : next_materialized_literal_index_(JSFunction::kLiteralsPrefixSize),
1452 next_handler_index_(0), 1457 next_handler_index_(0),
1453 expected_property_count_(0), 1458 expected_property_count_(0),
1454 is_generator_(false), 1459 is_generator_(false),
1455 generator_object_variable_(NULL), 1460 generator_object_variable_(NULL),
1456 function_state_stack_(function_state_stack), 1461 function_state_stack_(function_state_stack),
1457 outer_function_state_(*function_state_stack), 1462 outer_function_state_(*function_state_stack),
1458 scope_stack_(scope_stack), 1463 scope_stack_(scope_stack),
1459 outer_scope_(*scope_stack), 1464 outer_scope_(*scope_stack),
1460 saved_ast_node_id_(0), 1465 saved_ast_node_id_(0),
1461 extra_param_(extra_param), 1466 ast_node_id_counter_(ast_node_id_counter),
1462 factory_(extra_param, ast_value_factory) { 1467 factory_(zone, ast_value_factory, ast_node_id_counter) {
1463 *scope_stack_ = scope; 1468 *scope_stack_ = scope;
1464 *function_state_stack = this; 1469 *function_state_stack = this;
1465 Traits::SetUpFunctionState(this, extra_param); 1470 Traits::SetUpFunctionState(this);
1466 } 1471 }
1467 1472
1468 1473
1469 template <class Traits> 1474 template <class Traits>
1470 ParserBase<Traits>::FunctionState::FunctionState( 1475 ParserBase<Traits>::FunctionState::FunctionState(
1471 FunctionState** function_state_stack, 1476 FunctionState** function_state_stack,
1472 typename Traits::Type::Scope** scope_stack, 1477 typename Traits::Type::Scope** scope_stack,
1473 typename Traits::Type::Scope** scope, 1478 typename Traits::Type::Scope** scope, typename Traits::Type::Zone* zone,
1474 typename Traits::Type::Zone* extra_param, 1479 AstValueFactory* ast_value_factory, int* ast_node_id_counter)
1475 AstValueFactory* ast_value_factory)
1476 : next_materialized_literal_index_(JSFunction::kLiteralsPrefixSize), 1480 : next_materialized_literal_index_(JSFunction::kLiteralsPrefixSize),
1477 next_handler_index_(0), 1481 next_handler_index_(0),
1478 expected_property_count_(0), 1482 expected_property_count_(0),
1479 is_generator_(false), 1483 is_generator_(false),
1480 generator_object_variable_(NULL), 1484 generator_object_variable_(NULL),
1481 function_state_stack_(function_state_stack), 1485 function_state_stack_(function_state_stack),
1482 outer_function_state_(*function_state_stack), 1486 outer_function_state_(*function_state_stack),
1483 scope_stack_(scope_stack), 1487 scope_stack_(scope_stack),
1484 outer_scope_(*scope_stack), 1488 outer_scope_(*scope_stack),
1485 saved_ast_node_id_(0), 1489 saved_ast_node_id_(0),
1486 extra_param_(extra_param), 1490 ast_node_id_counter_(ast_node_id_counter),
1487 factory_(extra_param, ast_value_factory) { 1491 factory_(zone, ast_value_factory, ast_node_id_counter) {
1488 *scope_stack_ = *scope; 1492 *scope_stack_ = *scope;
1489 *function_state_stack = this; 1493 *function_state_stack = this;
1490 Traits::SetUpFunctionState(this, extra_param); 1494 Traits::SetUpFunctionState(this);
1491 } 1495 }
1492 1496
1493 1497
1494 template <class Traits> 1498 template <class Traits>
1495 ParserBase<Traits>::FunctionState::~FunctionState() { 1499 ParserBase<Traits>::FunctionState::~FunctionState() {
1496 *scope_stack_ = outer_scope_; 1500 *scope_stack_ = outer_scope_;
1497 *function_state_stack_ = outer_function_state_; 1501 *function_state_stack_ = outer_function_state_;
1498 Traits::TearDownFunctionState(this, extra_param_); 1502 Traits::TearDownFunctionState(this);
1499 } 1503 }
1500 1504
1501 1505
1502 template<class Traits> 1506 template<class Traits>
1503 void ParserBase<Traits>::ReportUnexpectedToken(Token::Value token) { 1507 void ParserBase<Traits>::ReportUnexpectedToken(Token::Value token) {
1504 Scanner::Location source_location = scanner()->location(); 1508 Scanner::Location source_location = scanner()->location();
1505 1509
1506 // Four of the tokens are treated specially 1510 // Four of the tokens are treated specially
1507 switch (token) { 1511 switch (token) {
1508 case Token::EOS: 1512 case Token::EOS:
(...skipping 931 matching lines...) Expand 10 before | Expand all | Expand 10 after
2440 typename Traits::Type::StatementList body; 2444 typename Traits::Type::StatementList body;
2441 typename Traits::Type::AstProperties ast_properties; 2445 typename Traits::Type::AstProperties ast_properties;
2442 BailoutReason dont_optimize_reason = kNoReason; 2446 BailoutReason dont_optimize_reason = kNoReason;
2443 int num_parameters = -1; 2447 int num_parameters = -1;
2444 int materialized_literal_count = -1; 2448 int materialized_literal_count = -1;
2445 int expected_property_count = -1; 2449 int expected_property_count = -1;
2446 int handler_count = 0; 2450 int handler_count = 0;
2447 2451
2448 { 2452 {
2449 FunctionState function_state(&function_state_, &scope_, &scope, zone(), 2453 FunctionState function_state(&function_state_, &scope_, &scope, zone(),
2450 this->ast_value_factory()); 2454 this->ast_value_factory(),
2455 ast_node_id_counter_);
2451 Scanner::Location dupe_error_loc = Scanner::Location::invalid(); 2456 Scanner::Location dupe_error_loc = Scanner::Location::invalid();
2452 num_parameters = Traits::DeclareArrowParametersFromExpression( 2457 num_parameters = Traits::DeclareArrowParametersFromExpression(
2453 params_ast, scope_, &dupe_error_loc, ok); 2458 params_ast, scope_, &dupe_error_loc, ok);
2454 if (!*ok) { 2459 if (!*ok) {
2455 ReportMessageAt( 2460 ReportMessageAt(
2456 Scanner::Location(start_pos, scanner()->location().beg_pos), 2461 Scanner::Location(start_pos, scanner()->location().beg_pos),
2457 "malformed_arrow_function_parameter_list"); 2462 "malformed_arrow_function_parameter_list");
2458 return this->EmptyExpression(); 2463 return this->EmptyExpression();
2459 } 2464 }
2460 2465
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
2568 } 2573 }
2569 2574
2570 2575
2571 #undef CHECK_OK 2576 #undef CHECK_OK
2572 #undef CHECK_OK_CUSTOM 2577 #undef CHECK_OK_CUSTOM
2573 2578
2574 2579
2575 } } // v8::internal 2580 } } // v8::internal
2576 2581
2577 #endif // V8_PREPARSER_H 2582 #endif // V8_PREPARSER_H
OLDNEW
« src/ast.h ('K') | « src/parser.cc ('k') | src/rewriter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698