OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 // These types form an algebra over syntactic categories that is just | 70 // These types form an algebra over syntactic categories that is just |
71 // rich enough to let us recognize and propagate the constructs that | 71 // rich enough to let us recognize and propagate the constructs that |
72 // are either being counted in the preparser data, or is important | 72 // are either being counted in the preparser data, or is important |
73 // to throw the correct syntax error exceptions. | 73 // to throw the correct syntax error exceptions. |
74 | 74 |
75 enum ScopeType { | 75 enum ScopeType { |
76 kTopLevelScope, | 76 kTopLevelScope, |
77 kFunctionScope | 77 kFunctionScope |
78 }; | 78 }; |
79 | 79 |
| 80 enum VariableDeclarationContext { |
| 81 kSourceElement, |
| 82 kStatement, |
| 83 kForStatement |
| 84 }; |
| 85 |
80 class Expression; | 86 class Expression; |
81 | 87 |
82 class Identifier { | 88 class Identifier { |
83 public: | 89 public: |
84 static Identifier Default() { | 90 static Identifier Default() { |
85 return Identifier(kUnknownIdentifier); | 91 return Identifier(kUnknownIdentifier); |
86 } | 92 } |
87 static Identifier Eval() { | 93 static Identifier Eval() { |
88 return Identifier(kEvalIdentifier); | 94 return Identifier(kEvalIdentifier); |
89 } | 95 } |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
337 uintptr_t stack_limit, | 343 uintptr_t stack_limit, |
338 bool allow_lazy) | 344 bool allow_lazy) |
339 : scanner_(scanner), | 345 : scanner_(scanner), |
340 log_(log), | 346 log_(log), |
341 scope_(NULL), | 347 scope_(NULL), |
342 stack_limit_(stack_limit), | 348 stack_limit_(stack_limit), |
343 strict_mode_violation_location_(i::Scanner::Location::invalid()), | 349 strict_mode_violation_location_(i::Scanner::Location::invalid()), |
344 strict_mode_violation_type_(NULL), | 350 strict_mode_violation_type_(NULL), |
345 stack_overflow_(false), | 351 stack_overflow_(false), |
346 allow_lazy_(true), | 352 allow_lazy_(true), |
347 parenthesized_function_(false) { } | 353 parenthesized_function_(false), |
| 354 harmony_block_scoping_(scanner->HarmonyBlockScoping()) { } |
348 | 355 |
349 // Preparse the program. Only called in PreParseProgram after creating | 356 // Preparse the program. Only called in PreParseProgram after creating |
350 // the instance. | 357 // the instance. |
351 PreParseResult PreParse() { | 358 PreParseResult PreParse() { |
352 Scope top_scope(&scope_, kTopLevelScope); | 359 Scope top_scope(&scope_, kTopLevelScope); |
353 bool ok = true; | 360 bool ok = true; |
354 int start_position = scanner_->peek_location().beg_pos; | 361 int start_position = scanner_->peek_location().beg_pos; |
355 ParseSourceElements(i::Token::EOS, &ok); | 362 ParseSourceElements(i::Token::EOS, &ok); |
356 if (stack_overflow_) return kPreParseStackOverflow; | 363 if (stack_overflow_) return kPreParseStackOverflow; |
357 if (!ok) { | 364 if (!ok) { |
(...skipping 12 matching lines...) Expand all Loading... |
370 const char* name_opt) { | 377 const char* name_opt) { |
371 log_->LogMessage(start_pos, end_pos, type, name_opt); | 378 log_->LogMessage(start_pos, end_pos, type, name_opt); |
372 } | 379 } |
373 | 380 |
374 void CheckOctalLiteral(int beg_pos, int end_pos, bool* ok); | 381 void CheckOctalLiteral(int beg_pos, int end_pos, bool* ok); |
375 | 382 |
376 // All ParseXXX functions take as the last argument an *ok parameter | 383 // All ParseXXX functions take as the last argument an *ok parameter |
377 // which is set to false if parsing failed; it is unchanged otherwise. | 384 // which is set to false if parsing failed; it is unchanged otherwise. |
378 // By making the 'exception handling' explicit, we are forced to check | 385 // By making the 'exception handling' explicit, we are forced to check |
379 // for failure at the call sites. | 386 // for failure at the call sites. |
| 387 Statement ParseSourceElement(bool* ok); |
380 SourceElements ParseSourceElements(int end_token, bool* ok); | 388 SourceElements ParseSourceElements(int end_token, bool* ok); |
381 Statement ParseStatement(bool* ok); | 389 Statement ParseStatement(bool* ok); |
382 Statement ParseFunctionDeclaration(bool* ok); | 390 Statement ParseFunctionDeclaration(bool* ok); |
383 Statement ParseBlock(bool* ok); | 391 Statement ParseBlock(bool* ok); |
384 Statement ParseVariableStatement(bool* ok); | 392 Statement ParseVariableStatement(VariableDeclarationContext var_context, |
385 Statement ParseVariableDeclarations(bool accept_IN, int* num_decl, bool* ok); | 393 bool* ok); |
| 394 Statement ParseVariableDeclarations(VariableDeclarationContext var_context, |
| 395 int* num_decl, |
| 396 bool* ok); |
386 Statement ParseExpressionOrLabelledStatement(bool* ok); | 397 Statement ParseExpressionOrLabelledStatement(bool* ok); |
387 Statement ParseIfStatement(bool* ok); | 398 Statement ParseIfStatement(bool* ok); |
388 Statement ParseContinueStatement(bool* ok); | 399 Statement ParseContinueStatement(bool* ok); |
389 Statement ParseBreakStatement(bool* ok); | 400 Statement ParseBreakStatement(bool* ok); |
390 Statement ParseReturnStatement(bool* ok); | 401 Statement ParseReturnStatement(bool* ok); |
391 Statement ParseWithStatement(bool* ok); | 402 Statement ParseWithStatement(bool* ok); |
392 Statement ParseSwitchStatement(bool* ok); | 403 Statement ParseSwitchStatement(bool* ok); |
393 Statement ParseDoWhileStatement(bool* ok); | 404 Statement ParseDoWhileStatement(bool* ok); |
394 Statement ParseWhileStatement(bool* ok); | 405 Statement ParseWhileStatement(bool* ok); |
395 Statement ParseForStatement(bool* ok); | 406 Statement ParseForStatement(bool* ok); |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
489 | 500 |
490 i::JavaScriptScanner* scanner_; | 501 i::JavaScriptScanner* scanner_; |
491 i::ParserRecorder* log_; | 502 i::ParserRecorder* log_; |
492 Scope* scope_; | 503 Scope* scope_; |
493 uintptr_t stack_limit_; | 504 uintptr_t stack_limit_; |
494 i::Scanner::Location strict_mode_violation_location_; | 505 i::Scanner::Location strict_mode_violation_location_; |
495 const char* strict_mode_violation_type_; | 506 const char* strict_mode_violation_type_; |
496 bool stack_overflow_; | 507 bool stack_overflow_; |
497 bool allow_lazy_; | 508 bool allow_lazy_; |
498 bool parenthesized_function_; | 509 bool parenthesized_function_; |
| 510 bool harmony_block_scoping_; |
499 }; | 511 }; |
500 } } // v8::preparser | 512 } } // v8::preparser |
501 | 513 |
502 #endif // V8_PREPARSER_H | 514 #endif // V8_PREPARSER_H |
OLD | NEW |