Mercurial > spidermonkey-playground
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 |
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 | 2 #include "jsapi.h" |
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 | 6 /* The class of the global object. */ |
7 static JSClass global_class = { | |
8 "global", JSCLASS_GLOBAL_FLAGS, | |
9 JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, | |
10 JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub, | |
11 JSCLASS_NO_OPTIONAL_MEMBERS | |
12 }; | |
13 | |
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 | 17 { |
18 fprintf(stderr, "%s:%u:%s\n", | |
19 report->filename ? report->filename : "<no filename>", | |
20 (unsigned int) report->lineno, | |
21 message); | |
22 } | |
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 | 60 int main(int argc, const char *argv[]) |
61 { | |
62 /* JS variables. */ | |
63 JSRuntime *rt; | |
64 JSContext *cx; | |
65 JSObject *global; | |
66 | |
67 /* Create a JS runtime. */ | |
68 rt = JS_NewRuntime(8L * 1024L * 1024L); | |
69 if (rt == NULL) | |
70 return 1; | |
71 | |
72 /* Create a context. */ | |
73 cx = JS_NewContext(rt, 8192); | |
74 if (cx == NULL) | |
75 return 1; | |
76 JS_SetOptions(cx, JSOPTION_VAROBJFIX); | |
77 JS_SetVersion(cx, JSVERSION_LATEST); | |
78 JS_SetErrorReporter(cx, reportError); | |
79 | |
80 /* Create the global object. */ | |
81 global = JS_NewObject(cx, &global_class, NULL, NULL); | |
82 if (global == NULL) | |
83 return 1; | |
84 | |
85 /* Populate the global object with the standard globals, | |
86 like Object and Array. */ | |
87 if (!JS_InitStandardClasses(cx, global)) | |
88 return 1; | |
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 | 93 /* Your application code here. This may include JSAPI calls |
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 | 103 |
104 /* Cleanup. */ | |
105 JS_DestroyContext(cx); | |
106 JS_DestroyRuntime(rt); | |
107 JS_ShutDown(); | |
108 | |
109 printf("Farewell.\n"); | |
110 return 0; | |
111 } |