FreeWRL / FreeX3D 4.3.0
jsVRMLClasses_sm.h
1/*
2
3
4Complex VRML nodes as Javascript classes.
5
6*/
7
8/****************************************************************************
9 This file is part of the FreeWRL/FreeX3D Distribution.
10
11 Copyright 2009 CRC Canada. (http://www.crc.gc.ca)
12
13 FreeWRL/FreeX3D is free software: you can redistribute it and/or modify
14 it under the terms of the GNU Lesser Public License as published by
15 the Free Software Foundation, either version 3 of the License, or
16 (at your option) any later version.
17
18 FreeWRL/FreeX3D is distributed in the hope that it will be useful,
19 but WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 GNU General Public License for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with FreeWRL/FreeX3D. If not, see <http://www.gnu.org/licenses/>.
25****************************************************************************/
26
27
28#ifndef __FREEWRL_JS_VRML_CLASSES_H__
29#define __FREEWRL_JS_VRML_CLASSES_H__
30
31#ifndef UNUSED
32#define UNUSED(v) ((void) v)
33#endif
34
35#define INIT_ARGC_NODE 1
36#define INIT_ARGC 0
37
38/* tie a node into the root. Currently not required, as we do a better job
39of garbage collection
40... NOTE! JS_AddRoot and JS_RemoveRoot is DEPRECATED as of JS_VERSION 185*/
41#define ADD_ROOT(a,b) \
42 /* printf ("adding root cx %u pointer %u value %u\n",a,&b,b); \
43 if (JS_AddRoot(a,&b) != JS_TRUE) { \
44 printf ("JA_AddRoot failed at %s:%d\n",__FILE__,__LINE__); \
45 return JS_FALSE; \
46 } */
47
48#define REMOVE_ROOT(a,b) \
49 /* printf ("removing root %u\n",b); \
50 JS_RemoveRoot(a,&b); */
51
52//#define MF_LENGTH_FIELD "mf_len"
53#define MF_LENGTH_FIELD "length"
54
55#define DEFINE_LENGTH(this_context,this_object,this_length) \
56 {jsval zimbo = INT_TO_JSVAL(this_length);\
57 /* printf ("defining length to %d for %d %d\n",this_length,this_context,this_object);*/ \
58 if (!JS_DefineProperty(this_context, this_object, MF_LENGTH_FIELD, zimbo, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_STUB2, JSPROP_PERMANENT)) { \
59 ConsoleMessage( "JS_DefineProperty failed for \"%s\" at %s:%d.\n",MF_LENGTH_FIELD,__FILE__,__LINE__); \
60 return JS_FALSE;\
61 }}
62
63#define DEFINE_LENGTH_NORV(this_context,this_object,this_length) \
64 {jsval zimbo = INT_TO_JSVAL(this_length);\
65 /* printf ("defining length to %d for %d %d\n",this_length,this_context,this_object);*/ \
66 if (!JS_DefineProperty(this_context, this_object, MF_LENGTH_FIELD, zimbo, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_STUB2, JSPROP_PERMANENT)) { \
67 ConsoleMessage( "JS_DefineProperty failed for \"%s\" at %s:%d.\n",MF_LENGTH_FIELD,__FILE__,__LINE__); \
68 return;\
69 }}
70
71#define DEFINE_MF_ECMA_HAS_CHANGED \
72 {jsval zimbo = INT_TO_JSVAL(0); \
73 /* printf ("defining property for MF_ECMA_HAS_CHANGED... %d %d ",cx,obj); */ \
74 if (!JS_DefineProperty(cx, obj, "MF_ECMA_has_changed", zimbo, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_STUB2, JSPROP_PERMANENT)) { \
75 printf( "JS_DefineProperty failed for \"MF_ECMA_has_changed\" at %s:%d.\n",__FILE__,__LINE__); \
76 /* printf ("myThread is %u\n",pthread_self()); */ \
77 return JS_FALSE; \
78 }}
79
80#define SET_MF_ECMA_HAS_CHANGED { jsval myv; \
81 myv = INT_TO_JSVAL(1); \
82 /* printf ("setting property for MF_ECMA_has_changed %d %d\n",cx,obj); */ \
83 if (!JS_SetProperty(cx, obj, "MF_ECMA_has_changed", &myv)) { \
84 printf( "JS_SetProperty failed for \"MF_ECMA_has_changed\" in doMFSetProperty.\n"); \
85 return JS_FALSE; \
86 }}
87
88
89#define SET_JS_TICKTIME { jsval zimbo; \
90 JS_NewNumberValue(cx, TickTime(), &zimbo); \
91 if (!JS_DefineProperty(cx,obj, "__eventInTickTime", zimbo, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_STUB2, JSPROP_PERMANENT)) { \
92 printf( "JS_DefineProperty failed for \"__eventInTickTime\" at %s:%d.\n",__FILE__,__LINE__); \
93 return; \
94 }}
95
96#define COMPILE_FUNCTION_IF_NEEDED(tnfield) \
97 if (JSparamnames[tnfield].eventInFunction == NULL) { \
98 sprintf (scriptline,"%s%s(%s%s,__eventInTickTime)", "",JSparamnames[tnfield].name,"__eventIn_Value_",JSparamnames[tnfield].name); \
99 /* printf ("compiling function %s for type %d\n",scriptline,JSparamnames[tnfield].type); */ \
100 JSparamnames[tnfield].eventInFunction = (void*)JS_CompileScript( \
101 cx, obj, scriptline, strlen(scriptline), "compile eventIn",1); \
102 if (!JS_AddObjectRoot(cx,(JSObject**)(&JSparamnames[tnfield].eventInFunction))) { \
103 printf( "JS_AddObjectRoot failed for compilation of script \"%s\" at %s:%d.\n",scriptline,__FILE__,__LINE__); \
104 return; \
105 } \
106 }
107#define COMPILE_FUNCTION_IF_NEEDED_SET(tnfield,kind) \
108 if (JSparamnames[tnfield].eventInFunction == NULL) { \
109 if(kind == PKW_inputOutput) \
110 sprintf (scriptline,"set_%s(%s,__eventInTickTime)", JSparamnames[tnfield].name,JSparamnames[tnfield].name); \
111 else /* PKW_inputOnly */ \
112 sprintf (scriptline,"%s(%s%s,__eventInTickTime)", JSparamnames[tnfield].name,"__eventIn_Value_",JSparamnames[tnfield].name); \
113 /* printf ("compiling function %s for type %d\n",scriptline,JSparamnames[tnfield].type); */ \
114 JSparamnames[tnfield].eventInFunction = (void*)JS_CompileScript( \
115 cx, obj, scriptline, strlen(scriptline), "compile eventIn",1); \
116 if (!JS_AddObjectRoot(cx,(JSObject**)(&JSparamnames[tnfield].eventInFunction))) { \
117 printf( "JS_AddObjectRoot failed for compilation of script \"%s\" at %s:%d.\n",scriptline,__FILE__,__LINE__); \
118 return; \
119 } \
120 }
121
122#define RUN_FUNCTION(tnfield) \
123 { \
124 jsval zimbo; \
125 if (!JS_ExecuteScript(cx, obj, (JSScript*)JSparamnames[tnfield].eventInFunction, &zimbo)) { \
126 printf ("eventIn %s failed to complete successfully, in FreeWRL code %s:%d\n",JSparamnames[tnfield].name,__FILE__,__LINE__); \
127 /* printf ("myThread is %u\n",pthread_self());*/ \
128 } \
129 }
130
131
132#define SET_LENGTH(cx,newMFObject,length) \
133 { \
134 jsval lenval; \
135 lenval = INT_TO_JSVAL(length); \
136 if (!JS_SetProperty(cx, newMFObject, MF_LENGTH_FIELD, &lenval)) { \
137 printf( "JS_SetProperty failed for \"%s\" at %s:%d\n", MF_LENGTH_FIELD,__FILE__,__LINE__); \
138 return; \
139 } \
140 }
141
142#define SET_EVENTIN_VALUE(cx,obj,nameIndex,newObj) \
143 { \
144 char scriptline[100]; \
145 sprintf (scriptline,"__eventIn_Value_%s", JSparamnames[nameIndex].name); \
146 if (!JS_DefineProperty(cx,obj, scriptline, OBJECT_TO_JSVAL(newObj), JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_STUB2, JSPROP_PERMANENT)) { \
147 printf( "JS_DefineProperty failed for \"ECMA in\" at %s:%d.\n",__FILE__,__LINE__); \
148 /* printf ("myThread is %u\n",pthread_self()); */ \
149 return; \
150 } \
151 }
152
153
154/*
155 * The following VRML field types don't need JS classes:
156 * (ECMAScript native datatypes, see JS.pm):
157 *
158 * * SFBool
159 * * SFFloat
160 * * SFInt32
161 * * SFString
162 * * SFTime
163 *
164 * VRML field types that are implemented here as Javascript classes
165 * are:
166 *
167 * * SFColor, MFColor
168 * * MFFloat
169 * * SFImage -- not supported currently
170 * * MFInt32
171 * * SFNode (special case - must be supported perl (see JS.pm), MFNode
172 * * SFRotation, MFRotation
173 * * MFString
174 * * MFTime
175 * * SFVec2f, MFVec2f
176 * * SFVec3f, MFVec3f
177 * * SFVec3d
178 *
179 * These (single value) fields have struct types defined elsewhere
180 * (see Structs.h) that are stored by Javascript classes as private data.
181 *
182 * Some of the computations for SFVec3f, SFRotation are now defined
183 * elsewhere (see LinearAlgebra.h) to avoid duplication.
184 */
185
186
187/* helper functions */
188void JS_MY_Finalize(JSFreeOp *fop, JSObject *obj);
189
190
191JSBool doMFToString(JSContext *cx, JSObject *obj, const char *className, jsval *rval);
192
193JSBool doMFAddProperty(JSContext *cx, JSObject *obj, jsid id, jsval *vp, const char *name);
194JSBool doMFSetProperty(JSContext *cx, JSObject *obj, jsid id, jsval *vp, int type);
195
196JSBool getBrowser(JSContext *context, JSObject *obj, BrowserNative **brow);
197JSBool doMFStringUnquote(JSContext *cx, jsval *vp);
198
199
200/* class functions */
201
202
203JSBool globalResolve(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid);
204
205
206JSBool
207loadVrmlClasses(JSContext *context,
208 JSObject *globalObj);
209
210
211
212JSBool getECMANative(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
213
214JSBool setECMANative(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
215
216
217
218JSBool getAssignProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
219
220
221JSBool setAssignProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
222
223
224JSBool SFColorGetHSV(JSContext *cx, uintN argc, jsval *vp);
225JSBool SFColorSetHSV(JSContext *cx, uintN argc, jsval *vp);
226JSBool SFColorToString(JSContext *cx, uintN argc, jsval *vp);
227JSBool SFColorAssign(JSContext *cx, uintN argc, jsval *vp);
228JSBool SFColorConstr(JSContext *cx, uintN argc, jsval *vp);
229
230
231JSBool SFColorGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
232JSBool SFColorSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
233
234
235
236JSBool SFColorRGBAGetHSV(JSContext *cx, uintN argc, jsval *vp);
237JSBool SFColorRGBASetHSV(JSContext *cx, uintN argc, jsval *vp);
238JSBool SFColorRGBAToString(JSContext *cx, uintN argc, jsval *vp);
239JSBool SFColorRGBAAssign(JSContext *cx, uintN argc, jsval *vp);
240JSBool SFColorRGBAConstr(JSContext *cx, uintN argc, jsval *vp);
241
242
243JSBool SFColorRGBAGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
244JSBool SFColorRGBASetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
245
246
247JSBool SFImageToString(JSContext *cx, uintN argc,jsval *vp);
248JSBool SFImageAssign(JSContext *cx, uintN argc, jsval *vp);
249JSBool SFImageConstr(JSContext *cx, uintN argc, jsval *vp);
250
251
252
253
254JSBool SFImageGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
255JSBool SFImageSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
256
257
258
259JSBool SFNodeToString(JSContext *cx, uintN argc, jsval *vp);
260JSBool SFNodeValueOf(JSContext *cx, uintN argc, jsval *vp);
261JSBool SFNodeAssign(JSContext *cx, uintN argc, jsval *vp);
262JSBool SFNodeEquals(JSContext *cx, uintN argc, jsval *vp);
263JSBool SFNodeConstr(JSContext *cx, uintN argc, jsval *vp);
264
265
266
267void SFNodeFinalize(JSFreeOp *fop, JSObject *obj);
268
269JSBool SFNodeGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
270JSBool SFNodeSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
271
272
273JSBool SFRotationGetAxis(JSContext *cx, uintN argc, jsval *vp);
274JSBool SFRotationInverse(JSContext *cx, uintN argc, jsval *vp); /* not implemented */
275JSBool SFRotationMultiply(JSContext *cx, uintN argc, jsval *vp);
276JSBool SFRotationMultVec(JSContext *cx, uintN argc, jsval *vp);
277JSBool SFRotationSetAxis(JSContext *cx, uintN argc, jsval *vp);
278JSBool SFRotationSlerp(JSContext *cx, uintN argc, jsval *vp);
279JSBool SFRotationToString(JSContext *cx, uintN argc, jsval *vp);
280JSBool SFRotationAssign(JSContext *cx, uintN argc, jsval *vp);
281JSBool SFRotationConstr(JSContext *cx, uintN argc, jsval *vp);
282
283
284
285
286JSBool SFRotationGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
287JSBool SFRotationSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
288
289
290
291JSBool SFVec2fAdd(JSContext *cx, uintN argc, jsval *vp);
292JSBool SFVec2fDivide(JSContext *cx, uintN argc, jsval *vp);
293JSBool SFVec2fDot(JSContext *cx, uintN argc, jsval *vp);
294JSBool SFVec2fLength(JSContext *cx, uintN argc, jsval *vp);
295JSBool SFVec2fMultiply(JSContext *cx, uintN argc, jsval *vp);
296/* JSBool SFVec2fNegate(JSContext *cx, uintN argc, jsval *vp); */
297JSBool SFVec2fNormalize(JSContext *cx, uintN argc, jsval *vp);
298JSBool SFVec2fSubtract(JSContext *cx, uintN argc, jsval *vp);
299JSBool SFVec2fToString(JSContext *cx, uintN argc, jsval *vp);
300JSBool SFVec2fAssign(JSContext *cx, uintN argc, jsval *vp);
301JSBool SFVec2fConstr(JSContext *cx, uintN argc, jsval *vp);
302
303
304JSBool SFVec2fGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
305JSBool SFVec2fSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
306
307
308JSBool SFVec3fAdd(JSContext *cx, uintN argc, jsval *vp);
309JSBool SFVec3fCross(JSContext *cx, uintN argc, jsval *vp);
310JSBool SFVec3fDivide(JSContext *cx, uintN argc, jsval *vp);
311JSBool SFVec3fDot(JSContext *cx, uintN argc, jsval *vp);
312JSBool SFVec3fLength(JSContext *cx, uintN argc, jsval *vp);
313JSBool SFVec3fMultiply(JSContext *cx, uintN argc, jsval *vp);
314JSBool SFVec3fNegate(JSContext *cx, uintN argc, jsval *vp);
315JSBool SFVec3fNormalize(JSContext *cx, uintN argc, jsval *vp);
316JSBool SFVec3fSubtract(JSContext *cx, uintN argc, jsval *vp);
317JSBool SFVec3fToString(JSContext *cx, uintN argc, jsval *vp);
318JSBool SFVec3fAssign(JSContext *cx, uintN argc, jsval *vp);
319JSBool SFVec3fConstr(JSContext *cx, uintN argc, jsval *vp);
320JSBool SFVec3fGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
321JSBool SFVec3fSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
322
323JSBool SFVec3dAdd(JSContext *cx, uintN argc, jsval *vp);
324JSBool SFVec3dCross(JSContext *cx, uintN argc, jsval *vp);
325JSBool SFVec3dDivide(JSContext *cx, uintN argc, jsval *vp);
326JSBool SFVec3dDot(JSContext *cx, uintN argc, jsval *vp);
327JSBool SFVec3dLength(JSContext *cx, uintN argc, jsval *vp);
328JSBool SFVec3dMultiply(JSContext *cx, uintN argc, jsval *vp);
329JSBool SFVec3dNegate(JSContext *cx, uintN argc, jsval *vp);
330JSBool SFVec3dNormalize(JSContext *cx, uintN argc, jsval *vp);
331JSBool SFVec3dSubtract(JSContext *cx, uintN argc, jsval *vp);
332JSBool SFVec3dToString(JSContext *cx, uintN argc, jsval *vp);
333JSBool SFVec3dAssign(JSContext *cx, uintN argc, jsval *vp);
334JSBool SFVec3dConstr(JSContext *cx, uintN argc, jsval *vp);
335
336JSBool SFVec3dGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
337JSBool SFVec3dSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
338
339
340
341
342JSBool SFVec4fToString(JSContext *cx, uintN argc, jsval *vp);
343JSBool SFVec4fAssign(JSContext *cx, uintN argc, jsval *vp);
344JSBool SFVec4fConstr(JSContext *cx, uintN argc, jsval *vp);
345
346JSBool SFVec4fGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
347JSBool SFVec4fSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
348
349JSBool SFVec4dToString(JSContext *cx, uintN argc, jsval *vp);
350JSBool SFVec4dAssign(JSContext *cx, uintN argc, jsval *vp);
351JSBool SFVec4dConstr(JSContext *cx, uintN argc, jsval *vp);
352
353JSBool SFVec4dGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
354JSBool SFVec4dSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
355
356
357
358JSBool MFColorToString(JSContext *cx, uintN argc, jsval *vp);
359JSBool MFColorAssign(JSContext *cx, uintN argc, jsval *vp);
360JSBool MFColorConstr(JSContext *cx, uintN argc, jsval *vp);
361JSBool MFColorConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
362
363JSBool MFColorAddProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
364JSBool MFColorGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
365JSBool MFColorSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
366
367
368JSBool MFFloatToString(JSContext *cx, uintN argc, jsval *vp);
369JSBool MFFloatAssign(JSContext *cx, uintN argc, jsval *vp);
370JSBool MFFloatConstr(JSContext *cx, uintN argc, jsval *vp);
371JSBool MFFloatConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
372
373
374JSBool MFFloatAddProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
375JSBool MFFloatGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
376JSBool MFFloatSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
377
378
379JSBool MFInt32ToString(JSContext *cx, uintN argc, jsval *vp);
380JSBool MFInt32Assign(JSContext *cx, uintN argc, jsval *vp);
381JSBool MFInt32Constr(JSContext *cx, uintN argc, jsval *vp);
382JSBool MFInt32ConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
383
384JSBool MFInt32AddProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
385JSBool MFInt32GetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
386JSBool MFInt32SetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
387
388
389JSBool MFNodeToString(JSContext *cx, uintN argc, jsval *vp);
390JSBool MFNodeAssign(JSContext *cx, uintN argc, jsval *vp);
391JSBool MFNodeConstr(JSContext *cx, uintN argc, jsval *vp);
392JSBool MFNodeConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
393
394JSBool MFNodeAddProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
395JSBool MFNodeGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
396JSBool MFNodeSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
397
398
399JSBool MFRotationToString(JSContext *cx, uintN argc, jsval *vp);
400JSBool MFRotationAssign(JSContext *cx, uintN argc, jsval *vp);
401JSBool MFRotationConstr(JSContext *cx, uintN argc, jsval *vp);
402JSBool MFRotationConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
403
404
405JSBool MFRotationAddProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
406JSBool MFRotationGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
407JSBool MFRotationSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
408
409
410JSBool MFStringToString(JSContext *cx, uintN argc, jsval *vp);
411JSBool MFStringAssign(JSContext *cx, uintN argc, jsval *vp);
412JSBool MFStringConstr(JSContext *cx, uintN argc, jsval *vp);
413JSBool MFStringConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
414
415
416JSBool MFStringConvertProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JSType type, JS::MutableHandle<JS::Value> hvp);
417JSBool MFStringEnumerateProperty(JSContext *cx, JS::Handle<JSObject*> hobj);
418JSBool MFStringDeleteProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool *succeeded);
419
420JSBool MFStringAddProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
421JSBool MFStringDeleteProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool *succeeded);
422JSBool MFStringGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
423JSBool MFStringSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
424JSBool MFStringResolveProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid);
425
426
427
428JSBool MFTimeToString(JSContext *cx, uintN argc, jsval *vp);
429JSBool MFTimeAssign(JSContext *cx, uintN argc, jsval *vp);
430JSBool MFTimeConstr(JSContext *cx, uintN argc, jsval *vp);
431JSBool MFTimeConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
432
433
434
435JSBool MFTimeAddProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
436JSBool MFTimeGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
437JSBool MFTimeSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
438
439
440
441JSBool MFVec2fToString(JSContext *cx, uintN argc, jsval *vp);
442JSBool MFVec2fAssign(JSContext *cx, uintN argc, jsval *vp);
443JSBool MFVec2fConstr(JSContext *cx, uintN argc, jsval *vp);
444JSBool MFVec2fConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
445
446
447
448JSBool MFVec2fAddProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
449JSBool MFVec2fGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
450JSBool MFVec2fSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
451
452
453JSBool MFVec3fToString(JSContext *cx, uintN argc, jsval *vp);
454JSBool MFVec3fAssign(JSContext *cx, uintN argc, jsval *vp);
455JSBool MFVec3fConstr(JSContext *cx, uintN argc, jsval *vp);
456JSBool MFVec3fConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
457
458
459
460
461JSBool MFVec3fAddProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
462JSBool MFVec3fGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
463JSBool MFVec3fSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
464
465
466
467JSBool VrmlMatrixToString(JSContext *cx, uintN argc, jsval *vp);
468JSBool VrmlMatrixAssign(JSContext *cx, uintN argc, jsval *vp);
469JSBool VrmlMatrixsetTransform(JSContext *cx, uintN argc, jsval *vp);
470JSBool VrmlMatrixgetTransform(JSContext *cx, uintN argc, jsval *vp);
471JSBool VrmlMatrixinverse(JSContext *cx, uintN argc, jsval *vp);
472JSBool VrmlMatrixtranspose(JSContext *cx, uintN argc, jsval *vp);
473JSBool VrmlMatrixmultLeft(JSContext *cx, uintN argc, jsval *vp);
474JSBool VrmlMatrixmultRight(JSContext *cx, uintN argc, jsval *vp);
475JSBool VrmlMatrixmultVecMatrix(JSContext *cx, uintN argc, jsval *vp);
476JSBool VrmlMatrixmultMatrixVec(JSContext *cx, uintN argc, jsval *vp);
477JSBool VrmlMatrixConstr(JSContext *cx, uintN argc, jsval *vp);
478JSBool VrmlMatrixConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
479
480
481JSBool VrmlMatrixAddProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
482JSBool VrmlMatrixGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp);
483JSBool VrmlMatrixSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
484
485
486JSBool _standardMFAssign(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval, JSClass *myClass, int type);
487JSBool _standardMFGetProperty(JSContext *cx, JSObject *obj, jsid id, jsval *vp, const char *makeNewElement, int type);
488
489void printJSNodeType (JSContext *context, JSObject *myobj);
490
491extern JSClass SFColorClass;
492extern JSPropertySpec (SFColorProperties)[];
493extern JSFunctionSpec (SFColorFunctions)[];
494extern JSClass SFColorRGBAClass;
495extern JSPropertySpec (SFColorRGBAProperties)[];
496extern JSFunctionSpec (SFColorRGBAFunctions)[];
497extern JSClass SFImageClass;
498extern JSPropertySpec (SFImageProperties)[];
499extern JSFunctionSpec (SFImageFunctions)[];
500extern JSClass SFNodeClass;
501extern JSPropertySpec (SFNodeProperties)[];
502extern JSFunctionSpec (SFNodeFunctions)[];
503extern JSClass SFRotationClass;
504extern JSPropertySpec (SFRotationProperties)[];
505extern JSFunctionSpec (SFRotationFunctions)[];
506extern JSClass SFVec2fClass;
507extern JSPropertySpec (SFVec2fProperties)[];
508extern JSFunctionSpec (SFVec2fFunctions)[];
509extern JSClass SFVec3fClass;
510extern JSPropertySpec (SFVec3fProperties)[];
511extern JSFunctionSpec (SFVec3fFunctions)[];
512extern JSClass SFVec3dClass;
513extern JSPropertySpec (SFVec3dProperties)[];
514extern JSFunctionSpec (SFVec3dFunctions)[];
515
516
517extern JSClass SFVec4fClass;
518extern JSPropertySpec (SFVec4fProperties)[];
519extern JSFunctionSpec (SFVec4fFunctions)[];
520extern JSClass SFVec4dClass;
521extern JSPropertySpec (SFVec4dProperties)[];
522extern JSFunctionSpec (SFVec4dFunctions)[];
523
524extern JSClass MFColorClass;
525extern JSFunctionSpec (MFColorFunctions)[];
526extern JSClass MFFloatClass;
527extern JSFunctionSpec (MFFloatFunctions)[];
528extern JSClass MFBoolClass;
529extern JSFunctionSpec (MFBoolFunctions)[];
530extern JSClass MFInt32Class;
531extern JSFunctionSpec (MFInt32Functions)[];
532extern JSClass MFNodeClass;
533extern JSFunctionSpec (MFNodeFunctions)[];
534extern JSClass MFRotationClass;
535extern JSFunctionSpec (MFRotationFunctions)[];
536extern JSClass MFStringClass;
537extern JSFunctionSpec (MFStringFunctions)[];
538extern JSClass MFTimeClass;
539extern JSPropertySpec (MFTimeProperties)[] ;
540extern JSFunctionSpec (MFTimeFunctions)[];
541extern JSClass MFVec2fClass;
542extern JSFunctionSpec (MFVec2fFunctions)[];
543extern JSClass MFVec3fClass;
544extern JSFunctionSpec (MFVec3fFunctions)[];
545extern JSClass VrmlMatrixClass;
546extern JSFunctionSpec (VrmlMatrixFunctions)[];
547
548
549JSBool js_SetPropertyCheck(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
550JSBool js_SetPropertyDebug5(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
551JSBool js_SetPropertyDebug6 (JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
552JSBool js_SetPropertyDebug3 (JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
553JSBool js_SetPropertyDebug8 (JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp);
554
555
556#endif /* JS_VRML_CLASSES */