Frame-this-03.js (907B)
1 // Frame.prototype.this in non-strict-mode functions, with primitive values 2 3 function classOf(obj) { 4 return Object.prototype.toString.call(obj).match(/^\[object (.*)\]$/)[1]; 5 } 6 7 var g = newGlobal({newCompartment: true}); 8 var dbg = new Debugger(g); 9 var hits = 0; 10 dbg.onDebuggerStatement = function (frame) { 11 hits++; 12 assertEq(frame.this instanceof Debugger.Object, true); 13 assertEq(frame.this.class, g.v == null ? classOf(g) : classOf(Object(g.v))); 14 }; 15 16 g.eval("function f() { debugger; }"); 17 18 g.eval("Boolean.prototype.f = f; v = true; v.f();"); 19 g.eval("f.call(v);"); 20 g.eval("Number.prototype.f = f; v = 3.14; v.f();"); 21 g.eval("f.call(v);"); 22 g.eval("String.prototype.f = f; v = 'hello'; v.f();"); 23 g.eval("f.call(v);"); 24 g.eval("Symbol.prototype.f = f; v = Symbol('world'); v.f();"); 25 g.eval("f.call(v);"); 26 g.eval("v = undefined; f.call(v);"); 27 g.eval("v = null; f.call(v);"); 28 29 assertEq(hits, 10);