Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(325)

Unified Diff: src/runtime.cc

Issue 8585001: Adapt source position recording and fix ScopeIterator. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Statement positions for return sequences. Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/runtime.cc
diff --git a/src/runtime.cc b/src/runtime.cc
index 62c38aa57f3b6aa3e80e78baf7f99dc38d0c184f..c65d31f226f7ab4173aa73e04788d8e36eb5ed75 100644
--- a/src/runtime.cc
+++ b/src/runtime.cc
@@ -11224,22 +11224,23 @@ class ScopeIterator {
return;
}
- // Check whether we are in global code or function code. If there is a stack
- // slot for .result then this function has been created for evaluating
- // global code and it is not a real function.
- // Checking for the existence of .result seems fragile, but the scope info
- // saved with the code object does not otherwise have that information.
- int index = shared_info->scope_info()->
- StackSlotIndex(isolate_->heap()->result_symbol());
-
// Reparse the code and analyze the scopes.
ZoneScope zone_scope(isolate, DELETE_ON_EXIT);
Handle<Script> script(Script::cast(shared_info->script()));
Scope* scope;
- if (index >= 0) {
- // Global code
+
+ // Check whether we are in global, eval or function code.
+ Handle<ScopeInfo> scope_info(shared_info->scope_info());
+ if (scope_info->Type() != FUNCTION_SCOPE) {
+ // Global or eval code.
CompilationInfo info(script);
- info.MarkAsGlobal();
+ if (scope_info->Type() == GLOBAL_SCOPE) {
+ info.MarkAsGlobal();
+ } else {
+ ASSERT(scope_info->Type() == EVAL_SCOPE);
+ info.MarkAsEval();
+ info.SetCallingContext(Handle<Context>(function_->context()));
+ }
CHECK(ParserApi::Parse(&info));
CHECK(Scope::Analyze(&info));
scope = info.function()->scope();
@@ -11252,9 +11253,8 @@ class ScopeIterator {
}
// Retrieve the scope chain for the current position.
- int statement_position =
- shared_info->code()->SourceStatementPosition(frame_->pc());
- scope->GetNestedScopeChain(&nested_scope_chain_, statement_position);
+ source_position_ = shared_info->code()->SourceStatementPosition(frame_->pc());
+ scope->GetNestedScopeChain(&nested_scope_chain_, source_position_);
}
// More scopes?
@@ -11430,6 +11430,7 @@ class ScopeIterator {
Handle<JSFunction> function_;
Handle<Context> context_;
List<Handle<ScopeInfo> > nested_scope_chain_;
+ int source_position_;
DISALLOW_IMPLICIT_CONSTRUCTORS(ScopeIterator);
};

Powered by Google App Engine
This is Rietveld 408576698