Mercurial > spidermonkey-playground
diff spidermonkey-playground.cpp @ 15:1d73446eef62
added functionInfo() native function.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Fri, 19 Jun 2009 22:42:00 -0700 |
parents | d200a8158bd5 |
children | 36b66c249446 |
line wrap: on
line diff
--- a/spidermonkey-playground.cpp Fri Jun 19 16:43:02 2009 -0700 +++ b/spidermonkey-playground.cpp Fri Jun 19 22:42:00 2009 -0700 @@ -106,6 +106,37 @@ return JS_LookupPropertyById(cx, target, argv[1], rval); } +static JSBool functionInfo(JSContext *cx, JSObject *obj, uintN argc, + jsval *argv, jsval *rval) +{ + JSFunction *func; + + if (!JS_ConvertArguments(cx, argc, argv, "f", &func)) + return JS_FALSE; + + JSScript *script = JS_GetFunctionScript(cx, func); + + if (script == NULL) { + *rval = JSVAL_NULL; + return JS_TRUE; + } + + jsval filenameVal = JSVAL_NULL; + + const char *filename = JS_GetScriptFilename(cx, script); + if (filename) { + JSString *filenameStr = JS_NewStringCopyZ(cx, filename); + filenameVal = STRING_TO_JSVAL(filenameStr); + } + + JSObject *funcInfo = JS_NewObject(cx, NULL, NULL, NULL); + JS_DefineProperty(cx, funcInfo, "filename", filenameVal, + NULL, NULL, 0); + + *rval = OBJECT_TO_JSVAL(funcInfo); + return JS_TRUE; +} + static JSBool stack(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { @@ -244,6 +275,7 @@ JS_FS("stack", stack, 0, 0, 0), JS_FS("require", require, 2, 0, 0), JS_FS("lookupProperty", lookupProperty, 2, 0, 0), + JS_FS("functionInfo", functionInfo, 1, 0, 0), JS_FS_END };