| 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/full-codegen/full-codegen.h" | 5 #include "src/full-codegen/full-codegen.h" |
| 6 | 6 |
| 7 #include "src/ast/ast-numbering.h" | 7 #include "src/ast/ast-numbering.h" |
| 8 #include "src/ast/ast.h" | 8 #include "src/ast/ast.h" |
| 9 #include "src/ast/prettyprinter.h" | 9 #include "src/ast/prettyprinter.h" |
| 10 #include "src/ast/scopes.h" | 10 #include "src/ast/scopes.h" |
| (...skipping 878 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 889 | 889 |
| 890 void FullCodeGenerator::EmitContinue(Statement* target) { | 890 void FullCodeGenerator::EmitContinue(Statement* target) { |
| 891 NestedStatement* current = nesting_stack_; | 891 NestedStatement* current = nesting_stack_; |
| 892 int context_length = 0; | 892 int context_length = 0; |
| 893 // When continuing, we clobber the unpredictable value in the accumulator | 893 // When continuing, we clobber the unpredictable value in the accumulator |
| 894 // with one that's safe for GC. If we hit an exit from the try block of | 894 // with one that's safe for GC. If we hit an exit from the try block of |
| 895 // try...finally on our way out, we will unconditionally preserve the | 895 // try...finally on our way out, we will unconditionally preserve the |
| 896 // accumulator on the stack. | 896 // accumulator on the stack. |
| 897 ClearAccumulator(); | 897 ClearAccumulator(); |
| 898 while (!current->IsContinueTarget(target)) { | 898 while (!current->IsContinueTarget(target)) { |
| 899 if (HasStackOverflow()) return; |
| 899 if (current->IsTryFinally()) { | 900 if (current->IsTryFinally()) { |
| 900 Comment cmnt(masm(), "[ Deferred continue through finally"); | 901 Comment cmnt(masm(), "[ Deferred continue through finally"); |
| 901 current->Exit(&context_length); | 902 current->Exit(&context_length); |
| 902 DCHECK_EQ(-1, context_length); | 903 DCHECK_EQ(-1, context_length); |
| 903 current->AsTryFinally()->deferred_commands()->RecordContinue(target); | 904 current->AsTryFinally()->deferred_commands()->RecordContinue(target); |
| 904 return; | 905 return; |
| 905 } | 906 } |
| 906 current = current->Exit(&context_length); | 907 current = current->Exit(&context_length); |
| 907 } | 908 } |
| 908 int stack_depth = current->GetStackDepthAtTarget(); | 909 int stack_depth = current->GetStackDepthAtTarget(); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 929 | 930 |
| 930 void FullCodeGenerator::EmitBreak(Statement* target) { | 931 void FullCodeGenerator::EmitBreak(Statement* target) { |
| 931 NestedStatement* current = nesting_stack_; | 932 NestedStatement* current = nesting_stack_; |
| 932 int context_length = 0; | 933 int context_length = 0; |
| 933 // When breaking, we clobber the unpredictable value in the accumulator | 934 // When breaking, we clobber the unpredictable value in the accumulator |
| 934 // with one that's safe for GC. If we hit an exit from the try block of | 935 // with one that's safe for GC. If we hit an exit from the try block of |
| 935 // try...finally on our way out, we will unconditionally preserve the | 936 // try...finally on our way out, we will unconditionally preserve the |
| 936 // accumulator on the stack. | 937 // accumulator on the stack. |
| 937 ClearAccumulator(); | 938 ClearAccumulator(); |
| 938 while (!current->IsBreakTarget(target)) { | 939 while (!current->IsBreakTarget(target)) { |
| 940 if (HasStackOverflow()) return; |
| 939 if (current->IsTryFinally()) { | 941 if (current->IsTryFinally()) { |
| 940 Comment cmnt(masm(), "[ Deferred break through finally"); | 942 Comment cmnt(masm(), "[ Deferred break through finally"); |
| 941 current->Exit(&context_length); | 943 current->Exit(&context_length); |
| 942 DCHECK_EQ(-1, context_length); | 944 DCHECK_EQ(-1, context_length); |
| 943 current->AsTryFinally()->deferred_commands()->RecordBreak(target); | 945 current->AsTryFinally()->deferred_commands()->RecordBreak(target); |
| 944 return; | 946 return; |
| 945 } | 947 } |
| 946 current = current->Exit(&context_length); | 948 current = current->Exit(&context_length); |
| 947 } | 949 } |
| 948 int stack_depth = current->GetStackDepthAtTarget(); | 950 int stack_depth = current->GetStackDepthAtTarget(); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 964 void FullCodeGenerator::VisitBreakStatement(BreakStatement* stmt) { | 966 void FullCodeGenerator::VisitBreakStatement(BreakStatement* stmt) { |
| 965 Comment cmnt(masm_, "[ BreakStatement"); | 967 Comment cmnt(masm_, "[ BreakStatement"); |
| 966 SetStatementPosition(stmt); | 968 SetStatementPosition(stmt); |
| 967 EmitBreak(stmt->target()); | 969 EmitBreak(stmt->target()); |
| 968 } | 970 } |
| 969 | 971 |
| 970 void FullCodeGenerator::EmitUnwindAndReturn() { | 972 void FullCodeGenerator::EmitUnwindAndReturn() { |
| 971 NestedStatement* current = nesting_stack_; | 973 NestedStatement* current = nesting_stack_; |
| 972 int context_length = 0; | 974 int context_length = 0; |
| 973 while (current != NULL) { | 975 while (current != NULL) { |
| 976 if (HasStackOverflow()) return; |
| 974 if (current->IsTryFinally()) { | 977 if (current->IsTryFinally()) { |
| 975 Comment cmnt(masm(), "[ Deferred return through finally"); | 978 Comment cmnt(masm(), "[ Deferred return through finally"); |
| 976 current->Exit(&context_length); | 979 current->Exit(&context_length); |
| 977 DCHECK_EQ(-1, context_length); | 980 DCHECK_EQ(-1, context_length); |
| 978 current->AsTryFinally()->deferred_commands()->RecordReturn(); | 981 current->AsTryFinally()->deferred_commands()->RecordReturn(); |
| 979 return; | 982 return; |
| 980 } | 983 } |
| 981 current = current->Exit(&context_length); | 984 current = current->Exit(&context_length); |
| 982 } | 985 } |
| 983 EmitReturnSequence(); | 986 EmitReturnSequence(); |
| (...skipping 954 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1938 return var->scope()->is_nonlinear() || | 1941 return var->scope()->is_nonlinear() || |
| 1939 var->initializer_position() >= proxy->position(); | 1942 var->initializer_position() >= proxy->position(); |
| 1940 } | 1943 } |
| 1941 | 1944 |
| 1942 | 1945 |
| 1943 #undef __ | 1946 #undef __ |
| 1944 | 1947 |
| 1945 | 1948 |
| 1946 } // namespace internal | 1949 } // namespace internal |
| 1947 } // namespace v8 | 1950 } // namespace v8 |
| OLD | NEW |