OLD | NEW |
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 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/ast.h" | 7 #include "src/ast.h" |
8 #include "src/ast-numbering.h" | 8 #include "src/ast-numbering.h" |
9 #include "src/code-factory.h" | 9 #include "src/code-factory.h" |
10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
269 | 269 |
270 void BreakableStatementChecker::VisitSpread(Spread* expr) { | 270 void BreakableStatementChecker::VisitSpread(Spread* expr) { |
271 Visit(expr->expression()); | 271 Visit(expr->expression()); |
272 } | 272 } |
273 | 273 |
274 | 274 |
275 void BreakableStatementChecker::VisitThisFunction(ThisFunction* expr) { | 275 void BreakableStatementChecker::VisitThisFunction(ThisFunction* expr) { |
276 } | 276 } |
277 | 277 |
278 | 278 |
279 void BreakableStatementChecker::VisitSuperReference(SuperReference* expr) {} | 279 void BreakableStatementChecker::VisitSuperPropertyReference( |
| 280 SuperPropertyReference* expr) {} |
| 281 |
| 282 |
| 283 void BreakableStatementChecker::VisitSuperCallReference( |
| 284 SuperCallReference* expr) {} |
280 | 285 |
281 | 286 |
282 #define __ ACCESS_MASM(masm()) | 287 #define __ ACCESS_MASM(masm()) |
283 | 288 |
284 bool FullCodeGenerator::MakeCode(CompilationInfo* info) { | 289 bool FullCodeGenerator::MakeCode(CompilationInfo* info) { |
285 Isolate* isolate = info->isolate(); | 290 Isolate* isolate = info->isolate(); |
286 | 291 |
287 TimerEventScope<TimerEventCompileFullCode> timer(info->isolate()); | 292 TimerEventScope<TimerEventCompileFullCode> timer(info->isolate()); |
288 | 293 |
289 // Ensure that the feedback vector is large enough. | 294 // Ensure that the feedback vector is large enough. |
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
661 masm_, stmt->position(), !checker.is_breakable()); | 666 masm_, stmt->position(), !checker.is_breakable()); |
662 // If the position recording did record a new position generate a debug | 667 // If the position recording did record a new position generate a debug |
663 // break slot to make the statement breakable. | 668 // break slot to make the statement breakable. |
664 if (position_recorded) { | 669 if (position_recorded) { |
665 DebugCodegen::GenerateSlot(masm_); | 670 DebugCodegen::GenerateSlot(masm_); |
666 } | 671 } |
667 } | 672 } |
668 } | 673 } |
669 | 674 |
670 | 675 |
671 void FullCodeGenerator::VisitSuperReference(SuperReference* super) { | 676 void FullCodeGenerator::VisitSuperPropertyReference( |
| 677 SuperPropertyReference* super) { |
672 __ CallRuntime(Runtime::kThrowUnsupportedSuperError, 0); | 678 __ CallRuntime(Runtime::kThrowUnsupportedSuperError, 0); |
673 } | 679 } |
674 | 680 |
| 681 |
| 682 void FullCodeGenerator::VisitSuperCallReference(SuperCallReference* super) { |
| 683 __ CallRuntime(Runtime::kThrowUnsupportedSuperError, 0); |
| 684 } |
| 685 |
675 | 686 |
676 void FullCodeGenerator::SetExpressionPosition(Expression* expr) { | 687 void FullCodeGenerator::SetExpressionPosition(Expression* expr) { |
677 if (!info_->is_debug()) { | 688 if (!info_->is_debug()) { |
678 CodeGenerator::RecordPositions(masm_, expr->position()); | 689 CodeGenerator::RecordPositions(masm_, expr->position()); |
679 } else { | 690 } else { |
680 // Check if the expression will be breakable without adding a debug break | 691 // Check if the expression will be breakable without adding a debug break |
681 // slot. | 692 // slot. |
682 BreakableStatementChecker checker(info_->isolate(), zone()); | 693 BreakableStatementChecker checker(info_->isolate(), zone()); |
683 checker.Check(expr); | 694 checker.Check(expr); |
684 // Record a statement position right here if the expression is not | 695 // Record a statement position right here if the expression is not |
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
971 | 982 |
972 void FullCodeGenerator::EmitPropertyKey(ObjectLiteralProperty* property, | 983 void FullCodeGenerator::EmitPropertyKey(ObjectLiteralProperty* property, |
973 BailoutId bailout_id) { | 984 BailoutId bailout_id) { |
974 VisitForStackValue(property->key()); | 985 VisitForStackValue(property->key()); |
975 __ InvokeBuiltin(Builtins::TO_NAME, CALL_FUNCTION); | 986 __ InvokeBuiltin(Builtins::TO_NAME, CALL_FUNCTION); |
976 PrepareForBailoutForId(bailout_id, NO_REGISTERS); | 987 PrepareForBailoutForId(bailout_id, NO_REGISTERS); |
977 __ Push(result_register()); | 988 __ Push(result_register()); |
978 } | 989 } |
979 | 990 |
980 | 991 |
| 992 void FullCodeGenerator::EmitLoadSuperConstructor(SuperCallReference* ref) { |
| 993 VisitForStackValue(ref->this_function_var()); |
| 994 __ CallRuntime(Runtime::kGetPrototype, 1); |
| 995 } |
| 996 |
| 997 |
981 void FullCodeGenerator::VisitReturnStatement(ReturnStatement* stmt) { | 998 void FullCodeGenerator::VisitReturnStatement(ReturnStatement* stmt) { |
982 Comment cmnt(masm_, "[ ReturnStatement"); | 999 Comment cmnt(masm_, "[ ReturnStatement"); |
983 SetStatementPosition(stmt); | 1000 SetStatementPosition(stmt); |
984 Expression* expr = stmt->expression(); | 1001 Expression* expr = stmt->expression(); |
985 VisitForAccumulatorValue(expr); | 1002 VisitForAccumulatorValue(expr); |
986 EmitUnwindBeforeReturn(); | 1003 EmitUnwindBeforeReturn(); |
987 EmitReturnSequence(); | 1004 EmitReturnSequence(); |
988 } | 1005 } |
989 | 1006 |
990 | 1007 |
(...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1642 } | 1659 } |
1643 codegen_->PrepareForBailoutForId(exit_id_, NO_REGISTERS); | 1660 codegen_->PrepareForBailoutForId(exit_id_, NO_REGISTERS); |
1644 codegen_->scope_ = saved_scope_; | 1661 codegen_->scope_ = saved_scope_; |
1645 } | 1662 } |
1646 | 1663 |
1647 | 1664 |
1648 #undef __ | 1665 #undef __ |
1649 | 1666 |
1650 | 1667 |
1651 } } // namespace v8::internal | 1668 } } // namespace v8::internal |
OLD | NEW |