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

Unified Diff: test/mjsunit/stack-traces-gc.js

Issue 11377158: Fire 'stack' getter of error objects after GC. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: addressed comments. Created 8 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
« src/heap.cc ('K') | « test/cctest/test-heap.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/stack-traces-gc.js
diff --git a/test/mjsunit/regress/regress-2163.js b/test/mjsunit/stack-traces-gc.js
similarity index 54%
copy from test/mjsunit/regress/regress-2163.js
copy to test/mjsunit/stack-traces-gc.js
index bfce9ff462f9f42548441a086d164bb342ed21e7..579a0c80a5a64e0117426ab0ff7dd0b74f048755 100644
--- a/test/mjsunit/regress/regress-2163.js
+++ b/test/mjsunit/stack-traces-gc.js
@@ -25,46 +25,56 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-// Flags: --expose-gc
+// Flags: --expose-gc --allow-natives-syntax
-// Handy abbreviation.
-var dp = Object.defineProperty;
+var fired = [];
+for (var i = 0; i < 100; i++) fired[i] = false;
-function getter() { return 111; }
-function setter(x) { print(222); }
-function anotherGetter() { return 333; }
-function anotherSetter(x) { print(444); }
-var obj1, obj2;
+function getter_function(i) {
+ return function() { fired[i] = true; };
+}
+
+// Error objects that die young.
+for (var i = 0; i < 100; i++) {
+ var error = new Error();
+ // Replace the getter to observe whether it has been fired,
+ // and disguise it as native.
+ var getter = getter_function(i);
+ %SetNativeFlag(getter);
+ error.__defineGetter__("stack", getter);
+
+ error = undefined;
+}
-// obj1 and obj2 share the getter accessor.
-obj1 = {};
-dp(obj1, "alpha", { get: getter, set: setter });
-obj2 = {}
-dp(obj2, "alpha", { get: getter });
-obj1 = {};
-assertEquals(111, obj2.alpha);
gc();
-assertEquals(111, obj2.alpha);
+for (var i = 0; i < 100; i++) assertFalse(fired[i]);
+
+// Error objects that are kept alive.
+var array = [];
+for (var i = 0; i < 100; i++) {
+ var error = new Error();
+ var getter = getter_function(i);
+ // Replace the getter to observe whether it has been fired,
+ // and disguise it as native.
+ %SetNativeFlag(getter);
+ error.__defineGetter__("stack", getter);
+
+ array.push(error);
+ error = undefined;
+}
-// obj1, obj2, and obj3 share the getter accessor.
-obj1 = {};
-dp(obj1, "alpha", { get: getter, set: setter });
-obj2 = {}
-dp(obj2, "alpha", { get: getter });
-obj1 = {};
gc();
-obj3 = {}
-dp(obj3, "alpha", { get: getter });
+// We don't expect all stack traces to be formatted after only one GC.
+assertTrue(fired[0]);
+for (var i = 0; i < 10; i++) gc();
+for (var i = 0; i < 100; i++) assertTrue(fired[i]);
-// obj1 and obj2 share the getter and setter accessor.
-obj1 = {};
-dp(obj1, "alpha", { get: getter, set: setter });
-obj1.beta = 10;
-obj2 = {}
-dp(obj2, "alpha", { get: getter, set: setter });
-obj1 = {};
-assertEquals(111, obj2.alpha);
+// Error objects with custom (non-native) stack getter.
+var custom_error = new Error();
+var custom_getter_fired = false;
+custom_error.__defineGetter__("stack",
+ function() { custom_getter_fired = true; });
gc();
-obj2.alpha = 100
-assertEquals(111, obj2.alpha);
+assertFalse(custom_getter_fired);
+
« src/heap.cc ('K') | « test/cctest/test-heap.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698