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/compiler.h" | 7 #include "src/compiler.h" |
8 | 8 |
9 #include "src/ast-numbering.h" | 9 #include "src/ast-numbering.h" |
10 #include "src/ast-this-access-visitor.h" | 10 #include "src/ast-this-access-visitor.h" |
(...skipping 767 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
778 Handle<Object> exception; | 778 Handle<Object> exception; |
779 if (!obj.ToHandle(&exception)) return; | 779 if (!obj.ToHandle(&exception)) return; |
780 | 780 |
781 MessageLocation location(info->script(), stmt->position(), stmt->position()); | 781 MessageLocation location(info->script(), stmt->position(), stmt->position()); |
782 USE(info->isolate()->Throw(*exception, &location)); | 782 USE(info->isolate()->Throw(*exception, &location)); |
783 } | 783 } |
784 | 784 |
785 | 785 |
786 static bool CheckSuperConstructorCall(CompilationInfo* info) { | 786 static bool CheckSuperConstructorCall(CompilationInfo* info) { |
787 FunctionLiteral* function = info->function(); | 787 FunctionLiteral* function = info->function(); |
| 788 if (FLAG_experimental_classes) return true; |
788 if (!function->uses_super_constructor_call()) return true; | 789 if (!function->uses_super_constructor_call()) return true; |
789 | |
790 if (function->is_default_constructor()) return true; | 790 if (function->is_default_constructor()) return true; |
791 | 791 |
792 ZoneList<Statement*>* body = function->body(); | 792 ZoneList<Statement*>* body = function->body(); |
793 CHECK(body->length() > 0); | 793 CHECK(body->length() > 0); |
794 | 794 |
795 int super_call_index = 0; | 795 int super_call_index = 0; |
796 // Allow 'use strict' and similiar and empty statements. | 796 // Allow 'use strict' and similiar and empty statements. |
797 while (true) { | 797 while (true) { |
798 CHECK(super_call_index < body->length()); // We know there is a super call. | 798 CHECK(super_call_index < body->length()); // We know there is a super call. |
799 Statement* stmt = body->at(super_call_index); | 799 Statement* stmt = body->at(super_call_index); |
(...skipping 29 matching lines...) Expand all Loading... |
829 ZoneList<Expression*>* arguments = callExpr->arguments(); | 829 ZoneList<Expression*>* arguments = callExpr->arguments(); |
830 | 830 |
831 AstThisAccessVisitor this_access_visitor(info->zone()); | 831 AstThisAccessVisitor this_access_visitor(info->zone()); |
832 this_access_visitor.VisitExpressions(arguments); | 832 this_access_visitor.VisitExpressions(arguments); |
833 | 833 |
834 if (this_access_visitor.HasStackOverflow()) return false; | 834 if (this_access_visitor.HasStackOverflow()) return false; |
835 if (this_access_visitor.UsesThis()) { | 835 if (this_access_visitor.UsesThis()) { |
836 ThrowSuperConstructorCheckError(info, stmt); | 836 ThrowSuperConstructorCheckError(info, stmt); |
837 return false; | 837 return false; |
838 } | 838 } |
839 | |
840 return true; | 839 return true; |
841 } | 840 } |
842 | 841 |
843 | 842 |
844 bool Compiler::Analyze(CompilationInfo* info) { | 843 bool Compiler::Analyze(CompilationInfo* info) { |
845 DCHECK(info->function() != NULL); | 844 DCHECK(info->function() != NULL); |
846 if (!Rewriter::Rewrite(info)) return false; | 845 if (!Rewriter::Rewrite(info)) return false; |
847 if (!Scope::Analyze(info)) return false; | 846 if (!Scope::Analyze(info)) return false; |
848 if (!Renumber(info)) return false; | 847 if (!Renumber(info)) return false; |
849 DCHECK(info->scope() != NULL); | 848 DCHECK(info->scope() != NULL); |
(...skipping 729 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1579 AllowHandleDereference allow_deref; | 1578 AllowHandleDereference allow_deref; |
1580 bool tracing_on = info()->IsStub() | 1579 bool tracing_on = info()->IsStub() |
1581 ? FLAG_trace_hydrogen_stubs | 1580 ? FLAG_trace_hydrogen_stubs |
1582 : (FLAG_trace_hydrogen && | 1581 : (FLAG_trace_hydrogen && |
1583 info()->closure()->PassesFilter(FLAG_trace_hydrogen_filter)); | 1582 info()->closure()->PassesFilter(FLAG_trace_hydrogen_filter)); |
1584 return (tracing_on && | 1583 return (tracing_on && |
1585 base::OS::StrChr(const_cast<char*>(FLAG_trace_phase), name_[0]) != NULL); | 1584 base::OS::StrChr(const_cast<char*>(FLAG_trace_phase), name_[0]) != NULL); |
1586 } | 1585 } |
1587 | 1586 |
1588 } } // namespace v8::internal | 1587 } } // namespace v8::internal |
OLD | NEW |