annotate helloworld.cpp @ 0:299e986f3250

This the minimal example
author Sara
date Fri, 13 Dec 2013 10:25:32 -0800
parents
children
rev   line source
Sara@0 1
Sara@0 2
Sara@0 3 /* Include the JSAPI header file to get access to SpiderMonkey. */
Sara@0 4 #include "jsapi.h"
Sara@0 5
Sara@0 6 /* The class of the global object. */
Sara@0 7 static JSClass global_class = {
Sara@0 8 "global", JSCLASS_GLOBAL_FLAGS,
Sara@0 9 JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_StrictPropertyStub,
Sara@0 10 JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub,
Sara@0 11 JSCLASS_NO_OPTIONAL_MEMBERS
Sara@0 12 };
Sara@0 13
Sara@0 14 /* The error reporter callback. */
Sara@0 15 void reportError(JSContext *cx, const char *message, JSErrorReport *report)
Sara@0 16 {
Sara@0 17 fprintf(stderr, "%s:%u:%s\n",
Sara@0 18 report->filename ? report->filename : "<no filename=\"filename\">",
Sara@0 19 (unsigned int) report->lineno,
Sara@0 20 message);
Sara@0 21 }
Sara@0 22
Sara@0 23 int main(int argc, const char *argv[])
Sara@0 24 {
Sara@0 25 /* JSAPI variables. */
Sara@0 26 JSRuntime *rt;
Sara@0 27 JSContext *cx;
Sara@0 28 JSObject *global;
Sara@0 29
Sara@0 30 /* Create a JS runtime. You always need at least one runtime per process. */
Sara@0 31 rt = JS_NewRuntime(8 * 1024 * 1024);
Sara@0 32 if (rt == NULL)
Sara@0 33 return 1;
Sara@0 34
Sara@0 35 /*
Sara@0 36 * Create a context. You always need a context per thread.
Sara@0 37 * Note that this program is not multi-threaded.
Sara@0 38 */
Sara@0 39 cx = JS_NewContext(rt, 8192);
Sara@0 40 if (cx == NULL)
Sara@0 41 return 1;
Sara@0 42 JS_SetOptions(cx, JSOPTION_VAROBJFIX | JSOPTION_JIT | JSOPTION_METHODJIT);
Sara@0 43 JS_SetVersion(cx, JSVERSION_LATEST);
Sara@0 44 JS_SetErrorReporter(cx, reportError);
Sara@0 45
Sara@0 46 /*
Sara@0 47 * Create the global object in a new compartment.
Sara@0 48 * You always need a global object per context.
Sara@0 49 */
Sara@0 50 global = JS_NewCompartmentAndGlobalObject(cx, &global_class, NULL);
Sara@0 51 if (global == NULL)
Sara@0 52 return 1;
Sara@0 53
Sara@0 54 /*
Sara@0 55 * Populate the global object with the standard JavaScript
Sara@0 56 * function and object classes, such as Object, Array, Date.
Sara@0 57 */
Sara@0 58 if (!JS_InitStandardClasses(cx, global))
Sara@0 59 return 1;
Sara@0 60
Sara@0 61 /* Your application code here. This may include JSAPI calls
Sara@0 62 * to create your own custom JavaScript objects and to run scripts.
Sara@0 63 *
Sara@0 64 * The following example code creates a literal JavaScript script,
Sara@0 65 * evaluates it, and prints the result to stdout.
Sara@0 66 *
Sara@0 67 * Errors are conventionally saved in a JSBool variable named ok.
Sara@0 68 */
Sara@0 69 const char *script = "'Hello ' + 'World!'";
Sara@0 70 jsval rval;
Sara@0 71 JSString *str;
Sara@0 72 JSBool ok;
Sara@0 73 const char *filename = "noname";
Sara@0 74 uintN lineno = 0;
Sara@0 75
Sara@0 76 ok = JS_EvaluateScript(cx, global, script, strlen(script),
Sara@0 77 filename, lineno, &rval);
Sara@0 78 if ( rval == JS_FALSE)//rval == JS_NULL |
Sara@0 79 return 1;
Sara@0 80
Sara@0 81 str = JS_ValueToString(cx, rval);
Sara@0 82 printf("%s\n", JS_EncodeString(cx, str));
Sara@0 83
Sara@0 84 /* End of your application code */
Sara@0 85
Sara@0 86 /* Clean things up and shut down SpiderMonkey. */
Sara@0 87 JS_DestroyContext(cx);
Sara@0 88 JS_DestroyRuntime(rt);
Sara@0 89 JS_ShutDown();
Sara@0 90 return 0;
Sara@0 91 }