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.

Reply via email to