Fix Debug.Object.prototype.name to return undefined if the object is not a function or is a nameless function.

--HG--
extra : rebase_source : 1143095edd69ef1dd69c63e09cd9ac5a0e574744
This commit is contained in:
Jason Orendorff 2011-05-23 17:07:26 -05:00
parent 75cd459ff4
commit e5bb78e4c4
5 changed files with 26 additions and 6 deletions

View File

@ -17,7 +17,7 @@ dbg.hooks = {
frame = frame.older;
}
assertEq(frame.type, 'call');
assertEq(frame.callee.name, null);
assertEq(frame.callee.name, undefined);
frame = frame.older;
assertEq(frame.type, 'eval');
hits++;

View File

@ -8,7 +8,7 @@ var hits = 0;
dbg.hooks = {
debuggerHandler: function (frame) {
var proxy = frame.arguments[0];
assertEq(proxy.name, null);
assertEq(proxy.name, undefined);
assertEq(proxy.apply(null, [33]).return, 34);
hits++;
}

View File

@ -9,6 +9,8 @@ dbg.hooks = {debuggerHandler: function (frame) { hits++; assertEq(frame.callee.n
hits = 0;
name = "f";
g.eval("(function f() { debugger; })();");
name = null;
name = undefined;
g.eval("(function () { debugger; })();");
assertEq(hits, 2);
name = "anonymous";
g.eval("Function('debugger;')();");
assertEq(hits, 3);

View File

@ -0,0 +1,18 @@
// |jit-test| debug
// The .name of a non-function object is undefined.
var g = newGlobal('new-compartment');
var hits = 0;
var dbg = new Debug(g);
dbg.hooks = {
debuggerHandler: function (frame) {
assertEq(frame.arguments[0].name, undefined);
hits++;
}
};
g.eval("function f(nonfunction) { debugger; }");
g.eval("f({});");
g.eval("f(/a*/);");
g.eval("f({name: 'bad'});");
g.eval("f(Proxy.createFunction({name: {value: 'bad'}}, function () {}));");
assertEq(hits, 4);

View File

@ -1323,13 +1323,13 @@ DebugObject_getName(JSContext *cx, uintN argc, Value *vp)
{
THIS_DEBUGOBJECT_REFERENT(cx, vp, "get name", obj);
if (!obj->isFunction()) {
vp->setNull();
vp->setUndefined();
return true;
}
JSString *name = obj->getFunctionPrivate()->atom;
if (!name) {
vp->setNull();
vp->setUndefined();
return true;
}