diff --git a/honoka-plugins/jsfilter/src/jsproc.cpp b/honoka-plugins/jsfilter/src/jsproc.cpp index 03bc17e..c204f9f 100644 --- a/honoka-plugins/jsfilter/src/jsproc.cpp +++ b/honoka-plugins/jsfilter/src/jsproc.cpp @@ -42,6 +42,27 @@ JSRuntime *jsrt; JSContext *jsct; JSObject *jsobj; + JSClass jscs; + JSProcPriv() { + jscs.name = "global"; + jscs.flags = JSCLASS_NEW_RESOLVE; + jscs.addProperty = JS_PropertyStub; + jscs.delProperty = JS_PropertyStub; + jscs.getProperty = JS_PropertyStub; + jscs.setProperty = JS_PropertyStub; + jscs.enumerate = enumerate; + jscs.resolve = (JSResolveOp)resolve; + jscs.convert = JS_ConvertStub; + jscs.finalize = JS_FinalizeStub; + + }; + static JSBool resolve(JSContext *context,JSObject *obj,jsval id,uintN flags,JSObject **objp) { + return JS_TRUE; + }; + static JSBool enumerate(JSContext *context,JSObject *obj) + { + return JS_EnumerateStandardClasses(context,obj); + }; }; } @@ -51,11 +72,6 @@ jspriv->jsrt = NULL; jspriv->jsct = NULL; jspriv->jsobj = NULL; - JSClass jscs = { - "global",0, - JS_PropertyStub,JS_PropertyStub,JS_PropertyStub,JS_PropertyStub, - JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub - }; int fd = open(filename.c_str(),O_RDONLY); if (fd == -1) return; @@ -70,7 +86,7 @@ jspriv->jsrt = NULL; return; } - jspriv->jsobj = JS_NewObject(jspriv->jsct, &jscs, NULL, NULL); + jspriv->jsobj = JS_NewObject(jspriv->jsct,&jspriv->jscs, NULL, NULL); if (!jspriv->jsobj) { JS_DestroyContext(jspriv->jsct); jspriv->jsct = NULL; @@ -120,8 +136,9 @@ if (!jspriv->jsct) return string(); jsval rval; JSString *str; - uintN lino; - if (!JS_EvaluateScript(jspriv->jsct,jspriv->jsobj,script.c_str(),strlen(script.c_str()),"script",lino, &rval)) { + char fn[] = "(inline)"; + uintN lino = 0; + if (!JS_EvaluateScript(jspriv->jsct,jspriv->jsobj,script.c_str(),strlen(script.c_str()),fn,lino, &rval)) { return string(); } str = JS_ValueToString(jspriv->jsct,rval);