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);
 }