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