Revision: 20883
Author: [email protected]
Date: Tue Apr 22 11:34:16 2014 UTC
Log: Context-allocate all parameters in generators
Generator function scopes have forced context allocation. Ensure that
all variables in such scopes get context allocation -- even unused
variables.
This fixes an assertion when reifying generator scopes in the debugger.
[email protected]
LOG=Y
BUG=v8:3280
Review URL: https://codereview.chromium.org/246733003
http://code.google.com/p/v8/source/detail?r=20883
Added:
/branches/bleeding_edge/test/mjsunit/regress/regress-3280.js
Modified:
/branches/bleeding_edge/src/scopes.cc
=======================================
--- /dev/null
+++ /branches/bleeding_edge/test/mjsunit/regress/regress-3280.js Tue Apr 22
11:34:16 2014 UTC
@@ -0,0 +1,25 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --harmony-generators --expose-debug-as debug
+
+var Debug = debug.Debug;
+
+var listener_called;
+
+function listener(event, exec_state, event_data, data) {
+ if (event == Debug.DebugEvent.Break) {
+ listener_called = true;
+ exec_state.frame().allScopes();
+ }
+}
+
+Debug.setListener(listener);
+
+function *generator_local_2(a) {
+ debugger;
+}
+generator_local_2(1).next();
+
+assertTrue(listener_called, "listener not called");
=======================================
--- /branches/bleeding_edge/src/scopes.cc Tue Apr 8 07:04:13 2014 UTC
+++ /branches/bleeding_edge/src/scopes.cc Tue Apr 22 11:34:16 2014 UTC
@@ -1266,7 +1266,7 @@
for (int i = params_.length() - 1; i >= 0; --i) {
Variable* var = params_[i];
ASSERT(var->scope() == this);
- if (uses_sloppy_arguments) {
+ if (uses_sloppy_arguments || has_forced_context_allocation()) {
// Force context allocation of the parameter.
var->ForceContextAllocation();
}
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.