annotate spidermonkey-playground.cpp @ 1:7444443d2646

added simple script and wrapper.cpp from jetpack
author Atul Varma <varmaa@toolness.com>
date Thu, 18 Jun 2009 20:35:22 -0700
parents spidermonkey-playground.c@d14fb1d5326c
children 1f3e9c8df4f0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
1 #include "string.h"
0
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
2 #include "jsapi.h"
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
3
1
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
4 #include "wrapper.h"
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
5
0
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
6 /* The class of the global object. */
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
7 static JSClass global_class = {
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
8 "global", JSCLASS_GLOBAL_FLAGS,
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
9 JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub,
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
10 JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub,
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
11 JSCLASS_NO_OPTIONAL_MEMBERS
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
12 };
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
13
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
14 /* The error reporter callback. */
1
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
15 static void reportError(JSContext *cx, const char *message,
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
16 JSErrorReport *report)
0
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
17 {
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
18 fprintf(stderr, "%s:%u:%s\n",
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
19 report->filename ? report->filename : "<no filename>",
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
20 (unsigned int) report->lineno,
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
21 message);
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
22 }
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
23
1
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
24 static JSBool print(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
25 jsval *rval)
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
26 {
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
27 char *str;
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
28
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
29 if (!JS_ConvertArguments(cx, argc, argv, "s", &str))
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
30 return JS_FALSE;
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
31
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
32 printf("%s\n", str);
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
33
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
34 return JS_TRUE;
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
35 }
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
36
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
37 static JSBool wrap(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
38 jsval *rval)
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
39 {
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
40 JSObject *wrappee;
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
41 JSObject *resolver;
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
42
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
43 if (!JS_ConvertArguments(cx, argc, argv, "oo", &wrappee, &resolver))
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
44 return JS_FALSE;
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
45
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
46 JSObject *result;
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
47
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
48 result = wrapObject(cx, argv[0], argv[1]);
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
49
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
50 *rval = OBJECT_TO_JSVAL(result);
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
51 return JS_TRUE;
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
52 }
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
53
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
54 static JSFunctionSpec global_functions[] = {
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
55 JS_FS("print", print, 1, 0, 0),
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
56 JS_FS("wrap", wrap, 2, 0, 0),
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
57 JS_FS_END
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
58 };
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
59
0
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
60 int main(int argc, const char *argv[])
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
61 {
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
62 /* JS variables. */
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
63 JSRuntime *rt;
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
64 JSContext *cx;
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
65 JSObject *global;
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
66
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
67 /* Create a JS runtime. */
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
68 rt = JS_NewRuntime(8L * 1024L * 1024L);
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
69 if (rt == NULL)
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
70 return 1;
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
71
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
72 /* Create a context. */
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
73 cx = JS_NewContext(rt, 8192);
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
74 if (cx == NULL)
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
75 return 1;
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
76 JS_SetOptions(cx, JSOPTION_VAROBJFIX);
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
77 JS_SetVersion(cx, JSVERSION_LATEST);
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
78 JS_SetErrorReporter(cx, reportError);
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
79
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
80 /* Create the global object. */
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
81 global = JS_NewObject(cx, &global_class, NULL, NULL);
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
82 if (global == NULL)
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
83 return 1;
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
84
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
85 /* Populate the global object with the standard globals,
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
86 like Object and Array. */
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
87 if (!JS_InitStandardClasses(cx, global))
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
88 return 1;
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
89
1
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
90 if (!JS_DefineFunctions(cx, global, global_functions))
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
91 return 1;
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
92
0
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
93 /* Your application code here. This may include JSAPI calls
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
94 to create your own custom JS objects and run scripts. */
1
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
95 char *source = "print('Hello World.'); wrap({}, {});";
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
96 jsval rval;
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
97 if (!JS_EvaluateScript(cx, global, source,
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
98 strlen(source), "<string>", 1,
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
99 &rval)) {
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
100 printf("An error occurred.\n");
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
101 return 1;
7444443d2646 added simple script and wrapper.cpp from jetpack
Atul Varma <varmaa@toolness.com>
parents: 0
diff changeset
102 }
0
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
103
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
104 /* Cleanup. */
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
105 JS_DestroyContext(cx);
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
106 JS_DestroyRuntime(rt);
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
107 JS_ShutDown();
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
108
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
109 printf("Farewell.\n");
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
110 return 0;
d14fb1d5326c Origination
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
111 }