diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp index 07fa8728ee0c..1f9729e633bd 100644 --- a/js/src/jsapi.cpp +++ b/js/src/jsapi.cpp @@ -4417,6 +4417,17 @@ JS_CompileUCScript(JSContext *cx, JSObject *obj, const jschar *chars, size_t len return JS_CompileUCScriptForPrincipals(cx, obj, NULL, chars, length, filename, lineno); } +JS_PUBLIC_API(JSScript *) +JS_CompileScriptForPrincipalsVersion(JSContext *cx, JSObject *obj, + JSPrincipals *principals, + const char *bytes, size_t length, + const char *filename, uintN lineno, + JSVersion version) +{ + AutoVersionAPI ava(cx, version); + return JS_CompileScriptForPrincipals(cx, obj, principals, bytes, length, filename, lineno); +} + JS_PUBLIC_API(JSScript *) JS_CompileScriptForPrincipals(JSContext *cx, JSObject *obj, JSPrincipals *principals, @@ -4538,6 +4549,14 @@ JS_CompileFileHandleForPrincipals(JSContext *cx, JSObject *obj, const char *file return script; } +JS_PUBLIC_API(JSScript *) +JS_CompileFileHandleForPrincipalsVersion(JSContext *cx, JSObject *obj, const char *filename, + FILE *file, JSPrincipals *principals, JSVersion version) +{ + AutoVersionAPI ava(cx, version); + return JS_CompileFileHandleForPrincipals(cx, obj, filename, file, principals); +} + JS_PUBLIC_API(JSScript *) JS_CompileFileHandle(JSContext *cx, JSObject *obj, const char *filename, FILE *file) { @@ -4780,6 +4799,15 @@ JS_ExecuteScript(JSContext *cx, JSObject *obj, JSScript *script, jsval *rval) return ok; } +JS_PUBLIC_API(JSBool) +JS_ExecuteScriptVersion(JSContext *cx, JSObject *obj, JSScript *script, jsval *rval, + JSVersion version) +{ + AutoVersionAPI ava(cx, version); + return JS_ExecuteScript(cx, obj, script, rval); +} + + JS_PUBLIC_API(JSBool) JS_EvaluateUCScriptForPrincipalsVersion(JSContext *cx, JSObject *obj, JSPrincipals *principals, diff --git a/js/src/jsapi.h b/js/src/jsapi.h index 11e095bc1608..84e4bdd0773f 100644 --- a/js/src/jsapi.h +++ b/js/src/jsapi.h @@ -2407,6 +2407,13 @@ JS_CompileScriptForPrincipals(JSContext *cx, JSObject *obj, const char *bytes, size_t length, const char *filename, uintN lineno); +extern JS_PUBLIC_API(JSScript *) +JS_CompileScriptForPrincipalsVersion(JSContext *cx, JSObject *obj, + JSPrincipals *principals, + const char *bytes, size_t length, + const char *filename, uintN lineno, + JSVersion version); + extern JS_PUBLIC_API(JSScript *) JS_CompileUCScript(JSContext *cx, JSObject *obj, const jschar *chars, size_t length, @@ -2437,6 +2444,11 @@ JS_CompileFileHandleForPrincipals(JSContext *cx, JSObject *obj, const char *filename, FILE *fh, JSPrincipals *principals); +extern JS_PUBLIC_API(JSScript *) +JS_CompileFileHandleForPrincipalsVersion(JSContext *cx, JSObject *obj, + const char *filename, FILE *fh, + JSPrincipals *principals); + /* * NB: you must use JS_NewScriptObject and root a pointer to its return value * in order to keep a JSScript and its atoms safe from garbage collection after @@ -2554,6 +2566,10 @@ JS_DecompileFunctionBody(JSContext *cx, JSFunction *fun, uintN indent); extern JS_PUBLIC_API(JSBool) JS_ExecuteScript(JSContext *cx, JSObject *obj, JSScript *script, jsval *rval); +extern JS_PUBLIC_API(JSBool) +JS_ExecuteScriptVersion(JSContext *cx, JSObject *obj, JSScript *script, jsval *rval, + JSVersion version); + /* * Execute either the function-defining prolog of a script, or the script's * main body, but not both. diff --git a/js/src/xpconnect/loader/mozJSComponentLoader.cpp b/js/src/xpconnect/loader/mozJSComponentLoader.cpp index 3e99f247ae19..85f6f1d19a87 100644 --- a/js/src/xpconnect/loader/mozJSComponentLoader.cpp +++ b/js/src/xpconnect/loader/mozJSComponentLoader.cpp @@ -1118,10 +1118,10 @@ mozJSComponentLoader::GlobalForLocation(nsILocalFile *aComponentFile, return NS_ERROR_FAILURE; } - script = JS_CompileScriptForPrincipals(cx, global, - jsPrincipals, - buf, fileSize32, - nativePath.get(), 1); + script = JS_CompileScriptForPrincipalsVersion( + cx, global, jsPrincipals, buf, fileSize32, nativePath.get(), 1, + JSVERSION_LATEST); + PR_MemUnmap(buf, fileSize32); #else /* HAVE_PR_MEMMAP */ @@ -1138,9 +1138,8 @@ mozJSComponentLoader::GlobalForLocation(nsILocalFile *aComponentFile, return NS_ERROR_FILE_NOT_FOUND; } - script = JS_CompileFileHandleForPrincipals(cx, global, - nativePath.get(), - fileHandle, jsPrincipals); + script = JS_CompileFileHandleForPrincipalsVersion( + cx, global, nativePath.get(), fileHandle, jsPrincipals, JSVERSION_LATEST); /* JS will close the filehandle after compilation is complete. */ #endif /* HAVE_PR_MEMMAP */ @@ -1175,10 +1174,9 @@ mozJSComponentLoader::GlobalForLocation(nsILocalFile *aComponentFile, buf[len] = '\0'; - script = JS_CompileScriptForPrincipals(cx, global, - jsPrincipals, - buf, bytesRead, - nativePath.get(), 1); + script = JS_CompileScriptForPrincipalsVersion( + cx, global, jsPrincipals, buf, bytesRead, nativePath.get(), 1, + JSVERSION_LATEST); } // Propagate the exception, if one exists. Also, don't leave the stale // exception on this context. @@ -1237,7 +1235,7 @@ mozJSComponentLoader::GlobalForLocation(nsILocalFile *aComponentFile, *aGlobal = global; jsval retval; - if (!JS_ExecuteScript(cx, global, script, &retval)) { + if (!JS_ExecuteScriptVersion(cx, global, script, &retval, JSVERSION_LATEST)) { #ifdef DEBUG_shaver_off fprintf(stderr, "mJCL: failed to execute %s\n", nativePath.get()); #endif