| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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 #include "src/ast.h" | 5 #include "src/ast.h" |
| 6 #include "src/messages.h" | 6 #include "src/messages.h" |
| 7 #include "src/parser.h" | 7 #include "src/parser.h" |
| 8 | 8 |
| 9 namespace v8 { | 9 namespace v8 { |
| 10 | 10 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 rewriter.descriptor_ = declaration_descriptor; | 23 rewriter.descriptor_ = declaration_descriptor; |
| 24 rewriter.names_ = names; | 24 rewriter.names_ = names; |
| 25 rewriter.ok_ = ok; | 25 rewriter.ok_ = ok; |
| 26 | 26 |
| 27 rewriter.RecurseIntoSubpattern(rewriter.pattern_, declaration->initializer); | 27 rewriter.RecurseIntoSubpattern(rewriter.pattern_, declaration->initializer); |
| 28 } | 28 } |
| 29 | 29 |
| 30 | 30 |
| 31 void Parser::PatternRewriter::VisitVariableProxy(VariableProxy* pattern) { | 31 void Parser::PatternRewriter::VisitVariableProxy(VariableProxy* pattern) { |
| 32 Expression* value = current_value_; | 32 Expression* value = current_value_; |
| 33 descriptor_->scope->RemoveUnresolved(pattern->AsVariableProxy()); | 33 descriptor_->scope->RemoveUnresolved(pattern); |
| 34 | 34 |
| 35 // Declare variable. | 35 // Declare variable. |
| 36 // Note that we *always* must treat the initial value via a separate init | 36 // Note that we *always* must treat the initial value via a separate init |
| 37 // assignment for variables and constants because the value must be assigned | 37 // assignment for variables and constants because the value must be assigned |
| 38 // when the variable is encountered in the source. But the variable/constant | 38 // when the variable is encountered in the source. But the variable/constant |
| 39 // is declared (and set to 'undefined') upon entering the function within | 39 // is declared (and set to 'undefined') upon entering the function within |
| 40 // which the variable or constant is declared. Only function variables have | 40 // which the variable or constant is declared. Only function variables have |
| 41 // an initial value in the declaration (because they are initialized upon | 41 // an initial value in the declaration (because they are initialized upon |
| 42 // entering the function). | 42 // entering the function). |
| 43 // | 43 // |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 354 Token::EQ_STRICT, factory()->NewVariableProxy(temp), | 354 Token::EQ_STRICT, factory()->NewVariableProxy(temp), |
| 355 factory()->NewUndefinedLiteral(RelocInfo::kNoPosition), | 355 factory()->NewUndefinedLiteral(RelocInfo::kNoPosition), |
| 356 RelocInfo::kNoPosition); | 356 RelocInfo::kNoPosition); |
| 357 Expression* value = factory()->NewConditional( | 357 Expression* value = factory()->NewConditional( |
| 358 is_undefined, node->value(), factory()->NewVariableProxy(temp), | 358 is_undefined, node->value(), factory()->NewVariableProxy(temp), |
| 359 RelocInfo::kNoPosition); | 359 RelocInfo::kNoPosition); |
| 360 RecurseIntoSubpattern(node->target(), value); | 360 RecurseIntoSubpattern(node->target(), value); |
| 361 } | 361 } |
| 362 | 362 |
| 363 | 363 |
| 364 void Parser::PatternRewriter::VisitSpread(Spread* node) { | |
| 365 UNREACHABLE(); | |
| 366 } | |
| 367 | |
| 368 | |
| 369 void Parser::PatternRewriter::VisitEmptyParentheses(EmptyParentheses* node) { | |
| 370 UNREACHABLE(); | |
| 371 } | |
| 372 | |
| 373 | |
| 374 // =============== UNREACHABLE ============================= | 364 // =============== UNREACHABLE ============================= |
| 375 | 365 |
| 376 void Parser::PatternRewriter::Visit(AstNode* node) { UNREACHABLE(); } | 366 void Parser::PatternRewriter::Visit(AstNode* node) { UNREACHABLE(); } |
| 377 | 367 |
| 378 #define NOT_A_PATTERN(Node) \ | 368 #define NOT_A_PATTERN(Node) \ |
| 379 void Parser::PatternRewriter::Visit##Node(v8::internal::Node*) { \ | 369 void Parser::PatternRewriter::Visit##Node(v8::internal::Node*) { \ |
| 380 UNREACHABLE(); \ | 370 UNREACHABLE(); \ |
| 381 } | 371 } |
| 382 | 372 |
| 383 NOT_A_PATTERN(BinaryOperation) | 373 NOT_A_PATTERN(BinaryOperation) |
| 384 NOT_A_PATTERN(Block) | 374 NOT_A_PATTERN(Block) |
| 385 NOT_A_PATTERN(BreakStatement) | 375 NOT_A_PATTERN(BreakStatement) |
| 386 NOT_A_PATTERN(Call) | 376 NOT_A_PATTERN(Call) |
| 387 NOT_A_PATTERN(CallNew) | 377 NOT_A_PATTERN(CallNew) |
| 388 NOT_A_PATTERN(CallRuntime) | 378 NOT_A_PATTERN(CallRuntime) |
| 389 NOT_A_PATTERN(CaseClause) | 379 NOT_A_PATTERN(CaseClause) |
| 390 NOT_A_PATTERN(ClassLiteral) | 380 NOT_A_PATTERN(ClassLiteral) |
| 391 NOT_A_PATTERN(CompareOperation) | 381 NOT_A_PATTERN(CompareOperation) |
| 392 NOT_A_PATTERN(Conditional) | 382 NOT_A_PATTERN(Conditional) |
| 393 NOT_A_PATTERN(ContinueStatement) | 383 NOT_A_PATTERN(ContinueStatement) |
| 394 NOT_A_PATTERN(CountOperation) | 384 NOT_A_PATTERN(CountOperation) |
| 395 NOT_A_PATTERN(DebuggerStatement) | 385 NOT_A_PATTERN(DebuggerStatement) |
| 396 NOT_A_PATTERN(DoWhileStatement) | 386 NOT_A_PATTERN(DoWhileStatement) |
| 397 NOT_A_PATTERN(EmptyStatement) | 387 NOT_A_PATTERN(EmptyStatement) |
| 398 NOT_A_PATTERN(SloppyBlockFunctionStatement) | 388 NOT_A_PATTERN(EmptyParentheses) |
| 399 NOT_A_PATTERN(ExportDeclaration) | 389 NOT_A_PATTERN(ExportDeclaration) |
| 400 NOT_A_PATTERN(ExpressionStatement) | 390 NOT_A_PATTERN(ExpressionStatement) |
| 401 NOT_A_PATTERN(ForInStatement) | 391 NOT_A_PATTERN(ForInStatement) |
| 402 NOT_A_PATTERN(ForOfStatement) | 392 NOT_A_PATTERN(ForOfStatement) |
| 403 NOT_A_PATTERN(ForStatement) | 393 NOT_A_PATTERN(ForStatement) |
| 404 NOT_A_PATTERN(FunctionDeclaration) | 394 NOT_A_PATTERN(FunctionDeclaration) |
| 405 NOT_A_PATTERN(FunctionLiteral) | 395 NOT_A_PATTERN(FunctionLiteral) |
| 406 NOT_A_PATTERN(IfStatement) | 396 NOT_A_PATTERN(IfStatement) |
| 407 NOT_A_PATTERN(ImportDeclaration) | 397 NOT_A_PATTERN(ImportDeclaration) |
| 408 NOT_A_PATTERN(Literal) | 398 NOT_A_PATTERN(Literal) |
| 409 NOT_A_PATTERN(NativeFunctionLiteral) | 399 NOT_A_PATTERN(NativeFunctionLiteral) |
| 410 NOT_A_PATTERN(Property) | 400 NOT_A_PATTERN(Property) |
| 411 NOT_A_PATTERN(RegExpLiteral) | 401 NOT_A_PATTERN(RegExpLiteral) |
| 412 NOT_A_PATTERN(ReturnStatement) | 402 NOT_A_PATTERN(ReturnStatement) |
| 403 NOT_A_PATTERN(SloppyBlockFunctionStatement) |
| 404 NOT_A_PATTERN(Spread) |
| 413 NOT_A_PATTERN(SuperPropertyReference) | 405 NOT_A_PATTERN(SuperPropertyReference) |
| 414 NOT_A_PATTERN(SuperCallReference) | 406 NOT_A_PATTERN(SuperCallReference) |
| 415 NOT_A_PATTERN(SwitchStatement) | 407 NOT_A_PATTERN(SwitchStatement) |
| 416 NOT_A_PATTERN(ThisFunction) | 408 NOT_A_PATTERN(ThisFunction) |
| 417 NOT_A_PATTERN(Throw) | 409 NOT_A_PATTERN(Throw) |
| 418 NOT_A_PATTERN(TryCatchStatement) | 410 NOT_A_PATTERN(TryCatchStatement) |
| 419 NOT_A_PATTERN(TryFinallyStatement) | 411 NOT_A_PATTERN(TryFinallyStatement) |
| 420 NOT_A_PATTERN(UnaryOperation) | 412 NOT_A_PATTERN(UnaryOperation) |
| 421 NOT_A_PATTERN(VariableDeclaration) | 413 NOT_A_PATTERN(VariableDeclaration) |
| 422 NOT_A_PATTERN(WhileStatement) | 414 NOT_A_PATTERN(WhileStatement) |
| 423 NOT_A_PATTERN(WithStatement) | 415 NOT_A_PATTERN(WithStatement) |
| 424 NOT_A_PATTERN(Yield) | 416 NOT_A_PATTERN(Yield) |
| 425 | 417 |
| 426 #undef NOT_A_PATTERN | 418 #undef NOT_A_PATTERN |
| 427 } // namespace internal | 419 } // namespace internal |
| 428 } // namespace v8 | 420 } // namespace v8 |
| OLD | NEW |