Sara@0: Sara@0: Sara@0: /* Include the JSAPI header file to get access to SpiderMonkey. */ Sara@0: #include "jsapi.h" Sara@0: Sara@0: /* The class of the global object. */ Sara@0: static JSClass global_class = { Sara@0: "global", JSCLASS_GLOBAL_FLAGS, Sara@0: JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_StrictPropertyStub, Sara@0: JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub, Sara@0: JSCLASS_NO_OPTIONAL_MEMBERS Sara@0: }; Sara@0: Sara@0: /* The error reporter callback. */ Sara@0: void reportError(JSContext *cx, const char *message, JSErrorReport *report) Sara@0: { Sara@0: fprintf(stderr, "%s:%u:%s\n", Sara@0: report->filename ? report->filename : "", Sara@0: (unsigned int) report->lineno, Sara@0: message); Sara@0: } Sara@0: Sara@0: int main(int argc, const char *argv[]) Sara@0: { Sara@0: /* JSAPI variables. */ Sara@0: JSRuntime *rt; Sara@0: JSContext *cx; Sara@0: JSObject *global; Sara@0: Sara@0: /* Create a JS runtime. You always need at least one runtime per process. */ Sara@0: rt = JS_NewRuntime(8 * 1024 * 1024); Sara@0: if (rt == NULL) Sara@0: return 1; Sara@0: Sara@0: /* Sara@0: * Create a context. You always need a context per thread. Sara@0: * Note that this program is not multi-threaded. Sara@0: */ Sara@0: cx = JS_NewContext(rt, 8192); Sara@0: if (cx == NULL) Sara@0: return 1; Sara@0: JS_SetOptions(cx, JSOPTION_VAROBJFIX | JSOPTION_JIT | JSOPTION_METHODJIT); Sara@0: JS_SetVersion(cx, JSVERSION_LATEST); Sara@0: JS_SetErrorReporter(cx, reportError); Sara@0: Sara@0: /* Sara@0: * Create the global object in a new compartment. Sara@0: * You always need a global object per context. Sara@0: */ Sara@0: global = JS_NewCompartmentAndGlobalObject(cx, &global_class, NULL); Sara@0: if (global == NULL) Sara@0: return 1; Sara@0: Sara@0: /* Sara@0: * Populate the global object with the standard JavaScript Sara@0: * function and object classes, such as Object, Array, Date. Sara@0: */ Sara@0: if (!JS_InitStandardClasses(cx, global)) Sara@0: return 1; Sara@0: Sara@0: /* Your application code here. This may include JSAPI calls Sara@0: * to create your own custom JavaScript objects and to run scripts. Sara@0: * Sara@0: * The following example code creates a literal JavaScript script, Sara@0: * evaluates it, and prints the result to stdout. Sara@0: * Sara@0: * Errors are conventionally saved in a JSBool variable named ok. Sara@0: */ Sara@0: const char *script = "'Hello ' + 'World!'"; Sara@0: jsval rval; Sara@0: JSString *str; Sara@0: JSBool ok; Sara@0: const char *filename = "noname"; Sara@0: uintN lineno = 0; Sara@0: Sara@0: ok = JS_EvaluateScript(cx, global, script, strlen(script), Sara@0: filename, lineno, &rval); Sara@0: if ( rval == JS_FALSE)//rval == JS_NULL | Sara@0: return 1; Sara@0: Sara@0: str = JS_ValueToString(cx, rval); Sara@0: printf("%s\n", JS_EncodeString(cx, str)); Sara@0: Sara@0: /* End of your application code */ Sara@0: Sara@0: /* Clean things up and shut down SpiderMonkey. */ Sara@0: JS_DestroyContext(cx); Sara@0: JS_DestroyRuntime(rt); Sara@0: JS_ShutDown(); Sara@0: return 0; Sara@0: }