Mercurial > spidermonkey-playground
changeset 12:e14f433f3a58
Function objects are now attached to stack frames returned by stack().
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Fri, 19 Jun 2009 15:16:11 -0700 |
parents | bde6607a3620 |
children | d200a8158bd5 |
files | spidermonkey-playground.cpp tcb.js |
diffstat | 2 files changed, 13 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/spidermonkey-playground.cpp Fri Jun 19 15:07:12 2009 -0700 +++ b/spidermonkey-playground.cpp Fri Jun 19 15:16:11 2009 -0700 @@ -128,6 +128,7 @@ jsval functionNameVal = JSVAL_NULL; jsval filenameVal = JSVAL_NULL; jsval lineNoVal = JSVAL_ZERO; + jsval functionObjectVal = JSVAL_NULL; JSFunction *func = JS_GetFrameFunction(cx, frame); if (func) { @@ -148,6 +149,9 @@ uintN lineNo = JS_PCToLineNumber(cx, script, bytecode); lineNoVal = INT_TO_JSVAL(lineNo); + + JSObject *functionObject = JS_GetFrameFunctionObject(cx, frame); + functionObjectVal = OBJECT_TO_JSVAL(functionObject); } JSObject *frameInfo = JS_NewObject(cx, NULL, NULL, NULL); @@ -157,6 +161,9 @@ NULL, NULL, 0); JS_DefineProperty(cx, frameInfo, "functionName", functionNameVal, NULL, NULL, 0); + JS_DefineProperty(cx, frameInfo, "functionObject", functionObjectVal, + NULL, NULL, 0); + if (prevFrameInfo) JS_DefineProperty(cx, prevFrameInfo, "caller", OBJECT_TO_JSVAL(frameInfo), NULL, NULL, 0);
--- a/tcb.js Fri Jun 19 15:07:12 2009 -0700 +++ b/tcb.js Fri Jun 19 15:16:11 2009 -0700 @@ -6,8 +6,12 @@ frame.filename == "tcb.js")) print("access request from " + frame.filename + " on property '" + id + "' of " + obj); - // TODO: this won't work for the 'caller' property, looks like we need - // to look it up ourselves. + if (id == 'caller') { + if (frame.caller) + return frame.caller.functionObject; + else + return null; + } return lookupProperty(obj, id); }