| 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 901 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 912 | 912 |
| 913 void FullCodeGenerator::EmitContinue(Statement* target) { | 913 void FullCodeGenerator::EmitContinue(Statement* target) { |
| 914 NestedStatement* current = nesting_stack_; | 914 NestedStatement* current = nesting_stack_; |
| 915 int context_length = 0; | 915 int context_length = 0; |
| 916 // When continuing, we clobber the unpredictable value in the accumulator | 916 // When continuing, we clobber the unpredictable value in the accumulator |
| 917 // with one that's safe for GC. If we hit an exit from the try block of | 917 // with one that's safe for GC. If we hit an exit from the try block of |
| 918 // try...finally on our way out, we will unconditionally preserve the | 918 // try...finally on our way out, we will unconditionally preserve the |
| 919 // accumulator on the stack. | 919 // accumulator on the stack. |
| 920 ClearAccumulator(); | 920 ClearAccumulator(); |
| 921 while (!current->IsContinueTarget(target)) { | 921 while (!current->IsContinueTarget(target)) { |
| 922 if (HasStackOverflow()) return; |
| 922 if (current->IsTryFinally()) { | 923 if (current->IsTryFinally()) { |
| 923 Comment cmnt(masm(), "[ Deferred continue through finally"); | 924 Comment cmnt(masm(), "[ Deferred continue through finally"); |
| 924 current->Exit(&context_length); | 925 current->Exit(&context_length); |
| 925 DCHECK_EQ(-1, context_length); | 926 DCHECK_EQ(-1, context_length); |
| 926 current->AsTryFinally()->deferred_commands()->RecordContinue(target); | 927 current->AsTryFinally()->deferred_commands()->RecordContinue(target); |
| 927 return; | 928 return; |
| 928 } | 929 } |
| 929 current = current->Exit(&context_length); | 930 current = current->Exit(&context_length); |
| 930 } | 931 } |
| 931 int stack_depth = current->GetStackDepthAtTarget(); | 932 int stack_depth = current->GetStackDepthAtTarget(); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 952 | 953 |
| 953 void FullCodeGenerator::EmitBreak(Statement* target) { | 954 void FullCodeGenerator::EmitBreak(Statement* target) { |
| 954 NestedStatement* current = nesting_stack_; | 955 NestedStatement* current = nesting_stack_; |
| 955 int context_length = 0; | 956 int context_length = 0; |
| 956 // When breaking, we clobber the unpredictable value in the accumulator | 957 // When breaking, we clobber the unpredictable value in the accumulator |
| 957 // with one that's safe for GC. If we hit an exit from the try block of | 958 // with one that's safe for GC. If we hit an exit from the try block of |
| 958 // try...finally on our way out, we will unconditionally preserve the | 959 // try...finally on our way out, we will unconditionally preserve the |
| 959 // accumulator on the stack. | 960 // accumulator on the stack. |
| 960 ClearAccumulator(); | 961 ClearAccumulator(); |
| 961 while (!current->IsBreakTarget(target)) { | 962 while (!current->IsBreakTarget(target)) { |
| 963 if (HasStackOverflow()) return; |
| 962 if (current->IsTryFinally()) { | 964 if (current->IsTryFinally()) { |
| 963 Comment cmnt(masm(), "[ Deferred break through finally"); | 965 Comment cmnt(masm(), "[ Deferred break through finally"); |
| 964 current->Exit(&context_length); | 966 current->Exit(&context_length); |
| 965 DCHECK_EQ(-1, context_length); | 967 DCHECK_EQ(-1, context_length); |
| 966 current->AsTryFinally()->deferred_commands()->RecordBreak(target); | 968 current->AsTryFinally()->deferred_commands()->RecordBreak(target); |
| 967 return; | 969 return; |
| 968 } | 970 } |
| 969 current = current->Exit(&context_length); | 971 current = current->Exit(&context_length); |
| 970 } | 972 } |
| 971 int stack_depth = current->GetStackDepthAtTarget(); | 973 int stack_depth = current->GetStackDepthAtTarget(); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 987 void FullCodeGenerator::VisitBreakStatement(BreakStatement* stmt) { | 989 void FullCodeGenerator::VisitBreakStatement(BreakStatement* stmt) { |
| 988 Comment cmnt(masm_, "[ BreakStatement"); | 990 Comment cmnt(masm_, "[ BreakStatement"); |
| 989 SetStatementPosition(stmt); | 991 SetStatementPosition(stmt); |
| 990 EmitBreak(stmt->target()); | 992 EmitBreak(stmt->target()); |
| 991 } | 993 } |
| 992 | 994 |
| 993 void FullCodeGenerator::EmitUnwindAndReturn() { | 995 void FullCodeGenerator::EmitUnwindAndReturn() { |
| 994 NestedStatement* current = nesting_stack_; | 996 NestedStatement* current = nesting_stack_; |
| 995 int context_length = 0; | 997 int context_length = 0; |
| 996 while (current != NULL) { | 998 while (current != NULL) { |
| 999 if (HasStackOverflow()) return; |
| 997 if (current->IsTryFinally()) { | 1000 if (current->IsTryFinally()) { |
| 998 Comment cmnt(masm(), "[ Deferred return through finally"); | 1001 Comment cmnt(masm(), "[ Deferred return through finally"); |
| 999 current->Exit(&context_length); | 1002 current->Exit(&context_length); |
| 1000 DCHECK_EQ(-1, context_length); | 1003 DCHECK_EQ(-1, context_length); |
| 1001 current->AsTryFinally()->deferred_commands()->RecordReturn(); | 1004 current->AsTryFinally()->deferred_commands()->RecordReturn(); |
| 1002 return; | 1005 return; |
| 1003 } | 1006 } |
| 1004 current = current->Exit(&context_length); | 1007 current = current->Exit(&context_length); |
| 1005 } | 1008 } |
| 1006 EmitReturnSequence(); | 1009 EmitReturnSequence(); |
| (...skipping 954 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1961 return var->scope()->is_nonlinear() || | 1964 return var->scope()->is_nonlinear() || |
| 1962 var->initializer_position() >= proxy->position(); | 1965 var->initializer_position() >= proxy->position(); |
| 1963 } | 1966 } |
| 1964 | 1967 |
| 1965 | 1968 |
| 1966 #undef __ | 1969 #undef __ |
| 1967 | 1970 |
| 1968 | 1971 |
| 1969 } // namespace internal | 1972 } // namespace internal |
| 1970 } // namespace v8 | 1973 } // namespace v8 |
| OLD | NEW |