Chromium Code Reviews| Index: runtime/vm/scopes.cc |
| diff --git a/runtime/vm/scopes.cc b/runtime/vm/scopes.cc |
| index d9f2df16e615c53eff63ef0c68a131f57344ed50..a0bb364fb45a4cb51ccc570b8e6ca7d81dbc9039 100644 |
| --- a/runtime/vm/scopes.cc |
| +++ b/runtime/vm/scopes.cc |
| @@ -602,6 +602,28 @@ LocalScope* LocalScope::RestoreOuterScope(const ContextScope& context_scope) { |
| } |
| +void LocalScope::RecursivelyCaptureAllVariables() { |
| + bool found = false; |
| + for (intptr_t i = 0; i < num_variables(); i++) { |
| + if ((VariableAt(i)->name().raw() == Symbols::StackTraceVar().raw()) || |
| + (VariableAt(i)->name().raw() == Symbols::ExceptionVar().raw()) || |
| + (VariableAt(i)->name().raw() == Symbols::SavedTryContextVar().raw())) { |
| + // Don't capture those variables because the VM expects them to be on the |
| + // stack. |
| + continue; |
| + } |
| + found = CaptureVariable(VariableAt(i)->name()); |
| + // Also manually set the variable as captured as CaptureVariable() does not |
| + // handle capturing variables on the same scope level. |
| + VariableAt(i)->set_is_captured(); |
| + ASSERT(found); |
| + } |
| + if (sibling() != NULL) { sibling()->RecursivelyCaptureAllVariables(); } |
| + if (child() != NULL) { child()->RecursivelyCaptureAllVariables(); } |
| +} |
| + |
| + |
|
srdjan
2014/08/26 15:54:33
two instead of three empty lines
Michael Lippautz (Google)
2014/08/26 16:45:48
Done.
|
| + |
| RawContextScope* LocalScope::CreateImplicitClosureScope(const Function& func) { |
| static const intptr_t kNumCapturedVars = 1; |