37#include <libFreeWRL.h>
39#include "../vrml_parser/Structs.h"
40#include "../main/headers.h"
41#include "../vrml_parser/CParseGeneral.h"
42#include "../main/Snapshot.h"
43#include "../scenegraph/Collision.h"
44#include "../scenegraph/quaternion.h"
45#include "../scenegraph/Viewer.h"
46#include "../input/EAIHelpers.h"
47#include "../input/SensInterps.h"
48#include "../x3d_parser/Bindable.h"
54#include "jsVRMLClasses.h"
62 #include "../scenegraph/ringbuf.h"
64 #define TRACK_FIFO_MSG 0
67 #define TRACK_FIFO_MSG 0
70extern void dump_scene (FILE *fp,
int level,
struct X3D_Node* node);
71extern char *parser_getNameFromNode(
struct X3D_Node *ptr) ;
84typedef struct pjsUtils{
86 JSBool reportWarnings;
89void *jsUtils_constructor(){
90 void *v = MALLOCV(
sizeof(
struct pjsUtils));
91 memset(v,0,
sizeof(
struct pjsUtils));
94void jsUtils_init(
struct tjsUtils *t){
97 t->prv = jsUtils_constructor();
99 ppjsUtils p = (ppjsUtils)t->prv;
100 p->insetSFStr = FALSE;
101 p->reportWarnings = JS_TRUE;
105int JS_SetPrivateFw(JSContext *cx, JSObject* obj,
void *data){
108 JS_SetPrivate(obj, data);
110 iret = JS_SetPrivate(cx,obj,data);
114JSObject* JS_NewGlobalObjectFw(JSContext *cx, JSClass *clasp){
116 return JS_NewGlobalObject(cx, clasp, NULL);
118 return JS_NewGlobalObject(cx,clasp);
121void * JS_GetPrivateFw(JSContext *cx,JSObject* obj){
123 return JS_GetPrivate(obj);
125 return JS_GetPrivate(cx,obj);
128JSObject* JS_GetParentFw(JSContext *cx, JSObject *obj){
130 return JS_GetParent(obj);
132 return JS_GetParent(cx,obj);
138JSBool JS_NewNumberValue(JSContext *cx, jsdouble d, jsval *rval){
139 *rval = JS_NumberValue(d);
146JS_ConstructObjectWithArgumentsFw(JSContext *cx, JSClass *clasp,
147 JSObject *parent,
unsigned argc, jsval *argv)
149 JSObject *global = JS_GetGlobalForScopeChain(cx);
151 if (!global || !JS_GetProperty(cx, global, clasp->name, &v))
153 if (JSVAL_IS_PRIMITIVE(v)) {
154 JS_ReportError(cx,
"cannot construct object: constructor is gone");
157 return JS_New(cx, JSVAL_TO_OBJECT(v), argc, argv);
161JS_ConstructObjectFw(JSContext *cx, JSClass *clasp,
void *whatever, JSObject *parent)
163 return JS_ConstructObjectWithArgumentsFw(cx, clasp, parent, 0, NULL);
165JSClass* JS_GetClassFw(JSContext *cx, JSObject *obj){
166 return JS_GetClass(cx,obj);
168JSObject * JS_GetPrototypeFw(JSContext *cx, JSObject * obj){
170 return JS_GetPrototype(obj);
172 return JS_GetPrototype(cx,obj);
179static JSBool setSF_in_MF (JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
180#elif JS_VERSION == 185
181static JSBool setSF_in_MF (JSContext *cx, JSObject *obj, jsid iid, JSBool strict, jsval *vp) {
183static JSBool setSF_in_MF (JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
184 JSObject *obj = *hobj._;
194 ppjsUtils p = (ppjsUtils)gglobal()->jsUtils.prv;
202 if (!JS_IdToValue(cx,iid,&
id)) {
203 printf(
"setSF_in_MF: JS_IdToValue failed.\n");
211 #ifdef JSVRMLCLASSESVERBOSE
212 printf (
"setSF_in_MF: already caught this value; this is our JS_SetElement call\n");
218 p->insetSFStr = TRUE;
220 if (JSVAL_IS_INT(
id)) {
221 if (!JS_ValueToInt32(cx,
id,&num)) {
222 printf (
"setSF_in_MF: error converting to number...\n");
226 if (!JS_GetElement(cx, obj, num, &ele)) {
227 printf (
"error getting child %d in setSF_in_MF\n",num);
232 if (!JS_SetElement(cx,obj,num,vp)) {
233 printf (
"can not set element %d in MFString\n",num);
237 printf (
"expect an integer id in setSF_in_MF\n");
244 par = JS_GetParentFw(cx, me);
245 while (par != NULL) {
246 #ifdef JSVRMLCLASSESVERBOSE
247 printf (
"for obj %u: ",me);
248 printJSNodeType(cx,me);
249 printf (
"... parent %u\n",par);
250 printJSNodeType(cx,par);
253 if (JS_InstanceOf (cx, par, &SFNodeClass, NULL)) {
254 #ifdef JSVRMLCLASSESVERBOSE
255 printf (
" the parent IS AN SFNODE - it is %u\n",par);
259 if (!JS_GetProperty(cx, obj,
"_parentField", &pf)) {
260 printf (
"doMFSetProperty, can not get parent field from this object\n");
264 nf = OBJECT_TO_JSVAL(me);
266 #ifdef JSVRMLCLASSESVERBOSE
268 printf (
"parentField is %u \"%s\"\n", pf, JS_GetStringBytes(JSVAL_TO_STRING(pf)));
270 tmp=JS_EncodeString(cx,JSVAL_TO_STRING(pf));
271 printf (
"parentField is %u \"%s\"\n", pf, tmp);
276 if (!JS_ValueToId(cx,pf,&oid)) {
277 printf(
"setSF_in_MF: JS_ValueToId failed.\n");
280 #if JS_VERSION == 186
284 JSMutableHandleValue hvp;
288 setSFNodeField(cx,hobj,hiid,JS_FALSE,hvp);
291 if (!setSFNodeField (cx, par, oid,
296 printf (
"could not set field of SFNode\n");
301 par = JS_GetParentFw(cx, me);
303 p->insetSFStr = FALSE;
309void JS_ECMA_TO_X3D(JSContext *cx,
void *Data,
unsigned datalen,
int dataType, jsval *newval) {
314 #ifdef JSVRMLCLASSESVERBOSE
315 printf (
"calling JS_ECMA_TO_X3D on type %s\n",FIELDTYPES[dataType]);
320 case FIELDTYPE_SFFloat: {
321 if (!JS_ValueToNumber(cx,*newval,&dl)) {
322 printf (
"problems converting Javascript val to number\n");
326 memcpy (Data, (
void *) &fl, datalen);
329 case FIELDTYPE_SFDouble:
330 case FIELDTYPE_SFTime: {
331 if (!JS_ValueToNumber(cx,*newval,&dl)) {
332 printf (
"problems converting Javascript val to number\n");
335 memcpy (Data, (
void *) &dl, datalen);
338 case FIELDTYPE_SFBool: {
339 il = JSVAL_TO_BOOLEAN (*newval);
340 memcpy (Data, (
void *) &il, datalen);
344 case FIELDTYPE_SFInt32: {
345 il = JSVAL_TO_INT (*newval);
346 memcpy (Data, (
void *) &il, datalen);
350 case FIELDTYPE_SFString: {
355 _idStr = JS_ValueToString(cx, *newval);
357 _id_c = JS_GetStringBytes(_idStr);
359 _id_c = JS_EncodeString(cx,_idStr);
362 oldS = (
struct Uni_String *) *((intptr_t *)Data);
364 *(
struct Uni_String **)Data = newASCIIString(_id_c);
366 #ifdef JSVRMLCLASSESVERBOSE
367 printf (
"JS_ECMA_TO_X3D, replacing \"%s\" with \"%s\" \n", oldS->strptr, _id_c);
371 verify_Uni_String (oldS,_id_c);
378 default: { printf(
"WARNING: SHOULD NOT BE HERE in JS_ECMA_TO_X3D! %d\n",dataType); }
384void JS_SF_TO_X3D(JSContext *cx,
void *Data,
unsigned datalen,
int dataType, jsval *newval) {
394 #ifdef JSVRMLCLASSESVERBOSE
395 printf (
"calling JS_SF_TO_X3D on type %s\n",FIELDTYPES[dataType]);
399 if ((VPtr = JS_GetPrivateFw(cx, JSVAL_TO_OBJECT(*newval))) == NULL) {
400 printf(
"JS_GetPrivate failed in JS_SF_TO_X3D.\n");
406 case FIELDTYPE_SFColor:
408 memcpy (Data, (
void *)((Cptr->v).c), datalen);
410 case FIELDTYPE_SFVec3d:
412 memcpy (Data, (
void *)((V3dptr->v).c), datalen);
414 case FIELDTYPE_SFVec3f:
416 memcpy (Data, (
void *)((V3ptr->v).c), datalen);
418 case FIELDTYPE_SFVec2f:
420 memcpy (Data, (
void *)((V2ptr->v).c), datalen);
422 case FIELDTYPE_SFRotation:
424 memcpy (Data,(
void *)((VRptr->v).c), datalen);
426 case FIELDTYPE_SFNode:
428 memcpy (Data, (
void *)(VNptr->handle), datalen);
431 default: { printf(
"WARNING: SHOULD NOT BE HERE! %d\n",dataType); }
435void JS_SF_TO_X3D_B(JSContext *cx,
void *Data,
int dataType,
int *valueChanged, jsval *newval) {
440 if ((ptr = JS_GetPrivateFw(cx, JSVAL_TO_OBJECT(*newval))) == NULL) {
441 printf(
"JS_GetPrivate failed in JS_SF_TO_X3D_B.\n");
444 if(ptr->type != dataType){
445 printf(
"JS assigning type %d to %d failed\n",ptr->type,dataType);
448 shallow_copy_field(dataType,ptr->v,Data);
450void JS_SF_TO_X3D_BNode(JSContext *cx,
void *Data,
int dataType,
int *valueChanged, jsval *newval) {
453 if(JSVAL_IS_NULL(*newval)){
456 shallow_copy_field(dataType,&any,Data);
458 JS_SF_TO_X3D_B(cx, Data, dataType, valueChanged, newval);
464void getJSMultiNumType(JSContext *,
struct Multi_Vec3f *,
int);
467void JS_MF_TO_X3D(JSContext *cx, JSObject * obj,
void *Data,
int dataType, jsval *newval) {
469 #ifdef JSVRMLCLASSESVERBOSE
470 printf (
"calling JS_MF_TO_X3D on type %s\n",FIELDTYPES[dataType]);
471 printf (
"JS_MF_TO_X3D, we have object %u, newval %u\n",obj,*newval);
472 printf (
"JS_MF_TO_X3D, obj is an:\n");
473 if (JSVAL_IS_OBJECT(OBJECT_TO_JSVAL(obj))) { printf (
"JS_MF_TO_X3D - obj is an OBJECT\n"); }
474 if (JSVAL_IS_PRIMITIVE(OBJECT_TO_JSVAL(obj))) { printf (
"JS_MF_TO_X3D - obj is an PRIMITIVE\n"); }
475 printf (
"JS_MF_TO_X3D, obj is a "); printJSNodeType(cx,obj);
476 printf (
"JS_MF_TO_X3D, vp is an:\n");
477 if (JSVAL_IS_OBJECT(*newval)) { printf (
"JS_MF_TO_X3D - vp is an OBJECT\n"); }
478 if (JSVAL_IS_PRIMITIVE(*newval)) { printf (
"JS_MF_TO_X3D - vp is an PRIMITIVE\n"); }
479 printf (
"JS_MF_TO_X3D, vp is a "); printJSNodeType(cx,JSVAL_TO_OBJECT(*newval));
482 *(jsval *)tg->JScript.JSglobal_return_val = *newval;
483 getJSMultiNumType (cx, (
struct Multi_Vec3f*) Data, convertToSFType(dataType));
491void X3D_ECMA_TO_JS(JSContext *cx,
void *Data,
int datalen,
int dataType, jsval *newval) {
498 #ifdef JSVRMLCLASSESVERBOSE
499 printf (
"calling X3D_ECMA_TO_JS on type %s\n",FIELDTYPES[dataType]);
504 case FIELDTYPE_SFFloat: {
505 memcpy ((
void *) &fl, Data, datalen);
506 JS_NewNumberValue(cx,(
double)fl,newval);
509 case FIELDTYPE_SFDouble:
510 case FIELDTYPE_SFTime: {
511 memcpy ((
void *) &dl, Data, datalen);
512 JS_NewNumberValue(cx,dl,newval);
515 case FIELDTYPE_SFBool:
516 case FIELDTYPE_SFInt32: {
517 memcpy ((
void *) &il,Data, datalen);
518 *newval = INT_TO_JSVAL(il);
522 case FIELDTYPE_SFString: {
528 memcpy((
void *) &ms,Data,
sizeof(
void *));
529 *newval = STRING_TO_JSVAL(JS_NewStringCopyZ(cx,ms->strptr));
532 default: { printf(
"WARNING: SHOULD NOT BE HERE in X3D_ECMA_TO_JS! %d\n",dataType); }
538void X3D_SF_TO_JS(JSContext *cx, JSObject *obj,
void *Data,
unsigned datalen,
int dataType, jsval *newval) {
552 #ifdef JSVRMLCLASSESVERBOSE
553 printf (
"calling X3D_SF_TO_JS on type %s, newval %u\n",FIELDTYPES[dataType],*newval);
556 if (!JSVAL_IS_OBJECT(*newval)) {
559 case FIELDTYPE_SFVec3f: script =
"new SFVec3f()";
break;
560 case FIELDTYPE_SFVec3d: script =
"new SFVec3d()";
break;
561 case FIELDTYPE_SFColor: script =
"new SFColor()";
break;
562 case FIELDTYPE_SFNode: script =
"new SFNode()";
break;
563 case FIELDTYPE_SFVec2f: script =
"new SFVec2f()";
break;
564 case FIELDTYPE_SFRotation: script =
"new SFRotation()";
break;
565 default: printf (
"invalid type in X3D_SF_TO_JS\n");
return;
571 #ifdef JSVRMLCLASSESVERBOSE
572 printf (
"X3D_SF_TO_JS, have to run script to make new object: \"%s\"\n",script);
575 if (!JS_EvaluateScript(cx, obj, script, (
int) strlen(script), FNAME_STUB, LINENO_STUB, &rval)) {
576 printf (
"error creating the new object in X3D_SF_TO_JS, script :%s:\n",script);
583 #ifdef JSVRMLCLASSESVERBOSE
584 printf (
"X3D_SF_TO_JS, so, newval now is %u\n",*newval);
589 if ((VPtr = JS_GetPrivateFw(cx, JSVAL_TO_OBJECT(*newval))) == NULL) {
590 printf(
"JS_GetPrivate failed in X3D_SF_TO_JS.\n");
597 case FIELDTYPE_SFColor:
599 memcpy ((
void *)((Cptr->v).c), Data, datalen);
600 Cptr->valueChanged = 1;
602 case FIELDTYPE_SFVec3f:
604 memcpy ((
void *)((V3ptr->v).c), Data, datalen);
605 V3ptr->valueChanged = 1;
607 case FIELDTYPE_SFVec3d:
609 memcpy ((
void *)((V3dptr->v).c), Data, datalen);
610 V3dptr->valueChanged = 1;
612 case FIELDTYPE_SFVec2f:
614 memcpy ((
void *)((V2ptr->v).c), Data, datalen);
615 V2ptr->valueChanged = 1;
617 case FIELDTYPE_SFRotation:
619 memcpy ((
void *)((VRptr->v).c), Data, datalen);
620 VRptr->valueChanged = 1;
622 case FIELDTYPE_SFNode:
624 memcpy ((
void *)(&(VNptr->handle)), Data, datalen);
625 VNptr->valueChanged = 1;
628 default: { printf(
"WARNING: SHOULD NOT BE HERE! %d\n",dataType); }
632void X3D_SF_TO_JS_B(JSContext *cx,
void *Data,
unsigned datalen,
int dataType,
int *valueChanged, jsval *newval)
640 #ifdef JSVRMLCLASSESVERBOSE
641 printf (
"calling X3D_SF_TO_JS on type %s, newval %u\n",FIELDTYPES[dataType],*newval);
649 case FIELDTYPE_SFVec3f:
650 newobj = JS_NewObject(cx,&SFVec3fClass,NULL,NULL);
break;
651 case FIELDTYPE_SFVec3d:
652 newobj = JS_NewObject(cx,&SFVec3dClass,NULL,NULL);
break;
653 case FIELDTYPE_SFColor:
654 newobj = JS_NewObject(cx,&SFColorClass,NULL,NULL);
break;
655 case FIELDTYPE_SFNode:
656 newobj = JS_NewObject(cx,&SFNodeClass,NULL,NULL);
break;
657 case FIELDTYPE_SFVec2f:
658 newobj = JS_NewObject(cx,&SFVec2fClass,NULL,NULL);
break;
659 case FIELDTYPE_SFRotation:
660 newobj = JS_NewObject(cx,&SFRotationClass,NULL,NULL);
break;
661 default: printf (
"invalid type in X3D_SF_TO_JS\n");
return;
666 if ((ptr = (
AnyNative *) AnyNativeNew(dataType,Data,valueChanged)) == NULL) {
667 printf(
"AnyNativeNew failed in X3D_MF_TO_SF_B.\n");
671 if (!JS_SetPrivateFw(cx, newobj, ptr)) {
672 printf(
"JS_SetPrivate failed in X3D_MF_TO_SF_B.\n");
677 *newval = OBJECT_TO_JSVAL(newobj);
678 #ifdef JSVRMLCLASSESVERBOSE
679 printf (
"X3D_SF_TO_JS_B, so, newval now is %u\n",*newval);
684void X3D_SF_TO_JS_BNode(JSContext *cx,
void *Data,
unsigned datalen,
int dataType,
int *valueChanged, jsval *newval)
687 if(any->sfnode == NULL){
688 *newval = JSVAL_NULL;
690 X3D_SF_TO_JS_B(cx, Data, datalen, dataType, valueChanged, newval);
695void X3D_MF_TO_JS(JSContext *cx, JSObject *obj,
void *Data,
int dataType, jsval *newval,
char *fieldName) {
702 jsval fieldNameAsJSVAL;
708 #ifdef JSVRMLCLASSESVERBOSE
709 printf (
"calling X3D_MF_TO_JS on type %s\n",FIELDTYPES[dataType]);
710 printf (
"X3D_MF_TO_JS, we have object %u, newval %u\n",obj,*newval);
711 printf (
"X3D_MF_TO_JS, obj is an:\n");
712 if (JSVAL_IS_OBJECT(OBJECT_TO_JSVAL(obj))) { printf (
"X3D_MF_TO_JS - obj is an OBJECT\n");
713 printf (
"X3D_MF_TO_JS, obj is a "); printJSNodeType(cx,obj);
715 if (JSVAL_IS_PRIMITIVE(OBJECT_TO_JSVAL(obj))) { printf (
"X3D_MF_TO_JS - obj is an PRIMITIVE\n"); }
716 printf (
"X3D_MF_TO_JS, vp is an:\n");
717 if (JSVAL_IS_OBJECT(*newval)) { printf (
"X3D_MF_TO_JS - newval is an OBJECT\n");
718 printf (
"X3D_MF_TO_JS, newval is a "); printJSNodeType(cx,JSVAL_TO_OBJECT(*newval));
720 if (JSVAL_IS_PRIMITIVE(*newval)) { printf (
"X3D_MF_TO_JS - newval is an PRIMITIVE\n"); }
724#ifdef JSVRMLCLASSESVERBOSE
725 printf (
"X3D_MF_TO_JS - is this already expanded? \n");
730 if ((VNptr = JS_GetPrivate(cx, obj)) == NULL) {
731 printf(
"JS_GetPrivate failed in X3D_MF_TO_JS.\n");
734 if (VNptr->fieldsExpanded) printf (
"FIELDS EXPANDED\n");
735 else printf (
"FIELDS NOT EXPANDED\n");
740 if (!JSVAL_IS_OBJECT(*newval)) {
741 #ifdef JSVRMLCLASSESVERBOSE
742 printf (
"X3D_MF_TO_JS - have to create empty MF type \n");
747 case FIELDTYPE_MFString: script =
"new MFString()";
break;
748 case FIELDTYPE_MFFloat: script =
"new MFFloat()";
break;
749 case FIELDTYPE_MFTime: script =
"new MFTime()";
break;
750 case FIELDTYPE_MFInt32: script =
"new MFInt32()";
break;
751 case FIELDTYPE_SFImage: script =
"new SFImage()";
break;
752 case FIELDTYPE_MFVec3f: script =
"new MFVec3f()";
break;
753 case FIELDTYPE_MFColor: script =
"new MFColor()";
break;
754 case FIELDTYPE_MFNode: script =
"new MFNode()";
break;
755 case FIELDTYPE_MFVec2f: script =
"new MFVec2f()";
break;
756 case FIELDTYPE_MFRotation: script =
"new MFRotation()";
break;
757 default: printf (
"invalid type in X3D_MF_TO_JS\n");
return;
760 if (!JS_EvaluateScript(cx, obj, script, (
int) strlen(script), FNAME_STUB, LINENO_STUB, &rval)) {
761 printf (
"error creating the new object in X3D_MF_TO_JS\n");
769 #ifdef JSVRMLCLASSESVERBOSE
770 printf (
"setting parent for %u to %u\n", *newval, obj);
778 if (!JS_SetParent (cx, JSVAL_TO_OBJECT(*newval), obj)) {
779 printf (
"X3D_MF_TO_JS - can not set parent!\n");
782 #ifdef JSVRMLCLASSESVERBOSE
783 printf (
"telling %u that it is a child \"%s\" of parent %u\n",*newval, fieldName, obj);
786 fieldNameAsJSVAL = STRING_TO_JSVAL(JS_NewStringCopyZ(cx,fieldName));
788 if (!JS_DefineProperty(cx, JSVAL_TO_OBJECT(*newval),
"_parentField", fieldNameAsJSVAL,
789 JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_STUB5, JSPROP_READONLY)) {
790 printf(
"JS_DefineProperty failed for \"%s\" in X3D_MF_TO_JS.\n", fieldName);
795 #ifdef JSVRMLCLASSESVERBOSE
796 printf (
"X3D_MF_TO_JS - object is %u, copying over data\n",*newval);
802 case FIELDTYPE_MFInt32:
804 for (i=0; i<MIptr->n; i++) {
805 if (!JS_DefineElement(cx, JSVAL_TO_OBJECT(*newval), (jsint) i, INT_TO_JSVAL(MIptr->p[i]),
806 JS_GET_PROPERTY_STUB, setSF_in_MF, JSPROP_ENUMERATE)) {
807 printf(
"JS_DefineElement failed for arg %u in MFInt32Constr.\n", i);
812 case FIELDTYPE_MFFloat:
814 for (i=0; i<MFptr->n; i++) {
815 if (!JS_DefineElement(cx, JSVAL_TO_OBJECT(*newval), (jsint) i, INT_TO_JSVAL(MFptr->p[i]),
816 JS_GET_PROPERTY_STUB, setSF_in_MF, JSPROP_ENUMERATE)) {
817 printf(
"JS_DefineElement failed for arg %u in MFFloatConstr.\n", i);
822 case FIELDTYPE_MFTime:
824 for (i=0; i<MTptr->n; i++) {
825 if (!JS_DefineElement(cx, JSVAL_TO_OBJECT(*newval), (jsint) i, INT_TO_JSVAL(MTptr->p[i]),
826 JS_GET_PROPERTY_STUB, setSF_in_MF, JSPROP_ENUMERATE)) {
827 printf(
"JS_DefineElement failed for arg %u in MFTimeConstr.\n", i);
832 case FIELDTYPE_MFColor:
833 case FIELDTYPE_MFVec3f: {
839 for (i=0; i<MCptr->n; i++) {
840 if (dataType == FIELDTYPE_MFColor)
841 sprintf (newline,
"new SFColor(%f, %f, %f)", MCptr->p[i].c[0], MCptr->p[i].c[1], MCptr->p[i].c[2]);
843 sprintf (newline,
"new SFColor(%f, %f, %f)", MCptr->p[i].c[0], MCptr->p[i].c[1], MCptr->p[i].c[2]);
844 if (!JS_EvaluateScript(cx, JSVAL_TO_OBJECT(*newval), newline, (
int) strlen(newline), FNAME_STUB, LINENO_STUB, &xf)) {
845 printf (
"error creating the new object in X3D_MF_TO_JS string :%s:\n",newline);
848 if (!JS_DefineElement(cx, JSVAL_TO_OBJECT(*newval), (jsint) i, xf,
849 JS_GET_PROPERTY_STUB, setSF_in_MF, JSPROP_ENUMERATE)) {
850 printf(
"JS_DefineElement failed for arg %u .\n", i);
856 case FIELDTYPE_MFVec2f: {
862 for (i=0; i<MCptr->n; i++) {
863 sprintf (newline,
"new SFVec2f(%f, %f)", MCptr->p[i].c[0], MCptr->p[i].c[1]);
864 if (!JS_EvaluateScript(cx, JSVAL_TO_OBJECT(*newval), newline, (
int) strlen(newline), FNAME_STUB, LINENO_STUB, &xf)) {
865 printf (
"error creating the new object in X3D_MF_TO_JS string :%s:\n",newline);
868 if (!JS_DefineElement(cx, JSVAL_TO_OBJECT(*newval), (jsint) i, xf,
869 JS_GET_PROPERTY_STUB, setSF_in_MF, JSPROP_ENUMERATE)) {
870 printf(
"JS_DefineElement failed for arg %u .\n", i);
875 case FIELDTYPE_MFRotation: {
881 for (i=0; i<MCptr->n; i++) {
882 sprintf (newline,
"new SFRotation(%f, %f, %f, %f)", MCptr->p[i].c[0], MCptr->p[i].c[1], MCptr->p[i].c[2], MCptr->p[i].c[3]);
883 if (!JS_EvaluateScript(cx, JSVAL_TO_OBJECT(*newval), newline, (
int) strlen(newline), FNAME_STUB, LINENO_STUB, &xf)) {
884 printf (
"error creating the new object in X3D_MF_TO_JS string :%s:\n",newline);
887 if (!JS_DefineElement(cx, JSVAL_TO_OBJECT(*newval), (jsint) i, xf,
888 JS_GET_PROPERTY_STUB, setSF_in_MF, JSPROP_ENUMERATE)) {
889 printf(
"JS_DefineElement failed for arg %u .\n", i);
895 case FIELDTYPE_MFNode: {
902 for (i=0; i<MCptr->n; i++) {
904 if (MCptr->p[i] != NULL) {
905 sprintf (newline,
"new SFNode(\"%p\")", MCptr->p[i]);
907 if (!JS_EvaluateScript(cx, JSVAL_TO_OBJECT(*newval), newline, (
int) strlen(newline), FNAME_STUB, LINENO_STUB, &xf)) {
908 printf (
"error creating the new object in X3D_MF_TO_JS string :%s:\n",newline);
911 if (!JS_DefineElement(cx, JSVAL_TO_OBJECT(*newval), (jsint) i, xf,
912 JS_GET_PROPERTY_STUB, setSF_in_MF, JSPROP_ENUMERATE)) {
913 printf(
"JS_DefineElement failed for arg %u .\n", i);
923 case FIELDTYPE_MFString: {
929 for (i=0; i<MCptr->n; i++) {
930 #ifdef JSVRMLCLASSESVERBOSE
931 printf (
"X3D_MF_TO_JS, working on %d of %d, p %u\n",i, MCptr->n, MCptr->p[i]);
934 if (((
struct Uni_String *)MCptr->p[i])->strptr != NULL)
935 sprintf (newline,
"new String('%s')", ((
struct Uni_String *)MCptr->p[i])->strptr);
936 else sprintf (newline,
"new String('(NULL)')");
938 #ifdef JSVRMLCLASSESVERBOSE
939 printf (
"X3D_MF_TO_JS, we have a new script to evaluate: \"%s\"\n",newline);
942 if (!JS_EvaluateScript(cx, JSVAL_TO_OBJECT(*newval), newline, (
int) strlen(newline), FNAME_STUB, LINENO_STUB, &xf)) {
943 printf (
"error creating the new object in X3D_MF_TO_JS string :%s:\n",newline);
946 if (!JS_DefineElement(cx, JSVAL_TO_OBJECT(*newval), (jsint) i, xf,
947 JS_GET_PROPERTY_STUB, setSF_in_MF, JSPROP_ENUMERATE)) {
948 printf(
"JS_DefineElement failed for arg %u .\n", i);
954 case FIELDTYPE_SFImage: {
961 sprintf (newline,
"new SFImage(");
963 for (i=0; i<MCptr->n; i++) {
965 sprintf (sl,
"0x%x ", MCptr->p[i]);
968 if (i != ((MCptr->n)-1)) strcat (newline,
",");
969 if (i == 2) strcat (newline,
" new MFInt32(");
972 strcat (newline,
"))");
974 if (!JS_EvaluateScript(cx, JSVAL_TO_OBJECT(*newval), newline, (
int) strlen(newline), FNAME_STUB, LINENO_STUB, &xf)) {
975 printf (
"error creating the new object in X3D_MF_TO_JS string :%s:\n",newline);
980 default: { printf(
"WARNING: SHOULD NOT BE HERE! %d\n",dataType); }
983 #ifdef JSVRMLCLASSESVERBOSE
984 printf (
"returning from X3D_MF_TO_JS\n");
989void X3D_MF_TO_JS_B(JSContext *cx,
union anyVrml* Data,
int dataType,
int *valueChanged, jsval *newval) {
998 JSObject *newobj = NULL;
1003 case FIELDTYPE_MFString:
1004 newobj = JS_NewObject(cx,&MFStringClass,NULL,NULL);
break;
1005 case FIELDTYPE_MFFloat:
1006 newobj = JS_NewObject(cx,&MFFloatClass,NULL,NULL);
break;
1007 case FIELDTYPE_MFTime:
1008 newobj = JS_NewObject(cx,&MFTimeClass,NULL,NULL);
break;
1009 case FIELDTYPE_MFInt32:
1010 newobj = JS_NewObject(cx,&MFInt32Class,NULL,NULL);
break;
1011 case FIELDTYPE_SFImage:
1012 newobj = JS_NewObject(cx,&SFImageClass,NULL,NULL);
break;
1013 case FIELDTYPE_MFVec3f:
1014 newobj = JS_NewObject(cx,&MFVec3fClass,NULL,NULL);
break;
1015 case FIELDTYPE_MFColor:
1016 newobj = JS_NewObject(cx,&MFColorClass,NULL,NULL);
break;
1017 case FIELDTYPE_MFNode:
1018 newobj = JS_NewObject(cx,&MFNodeClass,NULL,NULL);
break;
1019 case FIELDTYPE_MFVec2f:
1020 newobj = JS_NewObject(cx,&MFVec2fClass,NULL,NULL);
break;
1021 case FIELDTYPE_MFRotation:
1022 newobj = JS_NewObject(cx,&MFRotationClass,NULL,NULL);
break;
1023 default: printf (
"invalid type in X3D_MF_TO_JS\n");
return;
1026 if ((ptr = (
AnyNative *) AnyNativeNew(dataType,Data,valueChanged)) == NULL) {
1027 printf(
"AnyNativeNew failed in X3D_MF_TO_SF_B.\n");
1031 if (!JS_SetPrivateFw(cx, newobj, ptr)) {
1032 printf(
"JS_SetPrivate failed in X3D_MF_TO_SF_B.\n");
1037 *newval = OBJECT_TO_JSVAL(newobj);
1041 JSObject *obj2 = JSVAL_TO_OBJECT(*newval);
1042 if( (ptr2 = (
AnyNative*)JS_GetPrivateFw(cx,obj2)) == NULL){
1043 printf(
"native pointer doesn't survive reduction to jsval\n");
1045 printf(
"OK native pointer survives reduction to jsval");
1046 printf(
"ptr->v->mf.n=%d\n",ptr2->v->mfbool.n);
1057 ppjsUtils p = (ppjsUtils)gglobal()->jsUtils.prv;
1058 p->reportWarnings = JS_TRUE;
1063reportWarningsOff() {
1064 ppjsUtils p = (ppjsUtils)gglobal()->jsUtils.prv;
1065 p->reportWarnings = JS_FALSE;
1070errorReporter(JSContext *context,
const char *message, JSErrorReport *report)
1072 char *errorReport = 0;
1073 int len = 0, charPtrSize = (int)
sizeof(
char *);
1074 ppjsUtils p = (ppjsUtils)gglobal()->jsUtils.prv;
1079 fprintf(stderr,
"%s\n", message);
1084 if (JSREPORT_IS_WARNING(report->flags) && !p->reportWarnings) {
1088 if (report->filename == NULL) {
1089 len = (int) (strlen(message) + 1);
1091 len = (int) ((strlen(report->filename) + 1) + (strlen(message) + 1));
1094 errorReport = (
char *) JS_malloc(context, (len + STRING) * charPtrSize);
1100 if (JSREPORT_IS_WARNING(report->flags)) {
1101 sprintf(errorReport,
1102 "%swarning in %s at line %u:\n\t%s\n",
1103 JSREPORT_IS_STRICT(report->flags) ?
"strict " :
"",
1104 report->filename ? report->filename :
"",
1105 report->lineno ? report->lineno : 0,
1106 message ? message :
"No message.");
1108 sprintf(errorReport,
1109 "error in %s at line %u:\n\t%s\n",
1110 report->filename ? report->filename :
"",
1111 report->lineno ? report->lineno : 0,
1112 message ? message :
"No message.");
1115 fprintf(stderr,
"Javascript -- %s", errorReport);
1117 JS_free(context, errorReport);
1122static int *getFOP (
struct X3D_Node *node,
const char *str) {
1123 int *fieldOffsetsPtr;
1127 #ifdef JSVRMLCLASSESVERBOSE
1128 printf (
"...getFOP... it is a %s\n",stringNodeType(node->_nodeType));
1131 fieldOffsetsPtr = (
int *) NODE_OFFSETS[node->_nodeType];
1137 while (*fieldOffsetsPtr != -1) {
1138 #ifdef JSVRMLCLASSESVERBOSE
1139 printf (
"getFOP, looking at field %s type %s to match %s\n",FIELDNAMES[*fieldOffsetsPtr],FIELDTYPES[*(fieldOffsetsPtr+2)],str);
1144 if (strcmp(str,FIELDNAMES[*fieldOffsetsPtr]) == 0) {
1145 #ifdef JSVRMLCLASSESVERBOSE
1146 printf (
"getFOP, found entry for %s, it is %u (%p)\n",str,fieldOffsetsPtr,fieldOffsetsPtr);
1148 return fieldOffsetsPtr;
1150 fieldOffsetsPtr += FIELDOFFSET_LENGTH;
1155 printf (
"getFOP, could not find field \"%s\" in nodeType \"%s\"\n", str, stringNodeType(node->_nodeType));
1158 printf (
"getFOP, passed in X3D node was NULL!\n");
1165#if JS_VERSION <= 185
1166static JSBool getSFNodeField(JSContext *cx, JSObject *obj, jsid
id, jsval *vp){
1168static JSBool getSFNodeField(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
1169 JSObject *obj = *hobj._;
1176 int *fieldOffsetsPtr;
1188 _id_c = JS_GetStringBytes(JSVAL_TO_STRING(
id));
1190 _id_c = JS_EncodeString(cx,JSID_TO_STRING(
id));
1194 #ifdef JSVRMLCLASSESVERBOSE
1195 printf (
"\ngetSFNodeField called on name %s object %u\n",_id_c, obj);
1198 if ((ptr = (
SFNodeNative *)JS_GetPrivateFw(cx, obj)) == NULL) {
1199 printf(
"JS_GetPrivate failed in getSFNodeField.\n");
1200#if JS_VERSION >= 185
1205 node = X3D_NODE(ptr->handle);
1207 #ifdef JSVRMLCLASSESVERBOSE
1208 printf (
"getSFNodeField, got node %u for field %s object %u\n",node,_id_c, obj);
1209 printf (
"getSFNodeField, got node %p for field %s object %p\n",node,_id_c, obj);
1213 printf (
"getSFNodeField, can not set field \"%s\", NODE is NULL!\n",_id_c);
1214#if JS_VERSION >= 185
1221 fieldOffsetsPtr = getFOP(ptr->handle,
"FIFOsize");
1222 if (fieldOffsetsPtr == NULL) {
1224 printf(
"getSFNodeField : This is not a ringBuffer type\n");
1229 char *_id_buffer_c = NULL ;
1237 printf(
"getSFNodeField : This could be a ringBuffer type (found FIFOsize)\n");
1240 if (0 == strcmp(_id_c,
"int32Inp")) {
1242 printf(
"getSFNodeField %d : ptr->handle=%p (which corresponds to realnode in scenegraph/Component_Networking.c,314) node=%p see X3D_NODE(ptr->handle)\n",__LINE__,ptr->handle , node);
1245 buffer = (
RingBuffer *) OSCnode->_int32InpFIFO ;
1247 printf(
"getSFNodeField %d : buffer=%p\n",__LINE__,buffer) ;
1250 if (!RingBuffer_testEmpty(buffer)) {
1251 _id_buffer_c =
"_int32InpFIFO" ;
1252 iVal = RingBuffer_pullUnion(buffer)->i ;
1254 printf(
"getSFNodeField %d : iVal=%d\n",__LINE__,iVal);
1257 *vp = INT_TO_JSVAL(iVal) ;
1261 printf(
"but the buffer is empty\n") ;
1264 }
else if (0 == strcmp(_id_c,
"floatInp")) {
1266 printf(
"getSFNodeField %d : ptr->handle=%p (which corresponds to realnode in scenegraph/Component_Networking.c,314) node=%p see X3D_NODE(ptr->handle)\n",__LINE__,ptr->handle , node);
1268 buffer = (
RingBuffer *) OSCnode->_floatInpFIFO ;
1270 printf(
"getSFNodeField %d : buffer=%p\n",__LINE__,buffer) ;
1273 if (!RingBuffer_testEmpty(buffer)) {
1274 _id_buffer_c =
"_floatInpFIFO" ;
1275 fVal = RingBuffer_pullUnion(buffer)->f ;
1277 printf(
"getSFNodeField %d : fVal=%d\n",__LINE__,fVal);
1280 JS_NewNumberValue(cx,(
double)fVal,vp);
1284 printf(
"but the buffer is empty\n") ;
1287 }
else if (0 == strcmp(_id_c,
"stringInp")) {
1289 printf(
"getSFNodeField %d : ptr->handle=%p (which corresponds to realnode in scenegraph/Component_Networking.c,314) node=%p see X3D_NODE(ptr->handle)\n",__LINE__,ptr->handle , node);
1291 buffer = (
RingBuffer *) OSCnode->_stringInpFIFO ;
1293 printf(
"getSFNodeField %d : buffer=%p\n",__LINE__,buffer) ;
1296 if (!RingBuffer_testEmpty(buffer)) {
1297 _id_buffer_c =
"_stringInpFIFO" ;
1298 strPtr = (
char *) RingBuffer_pullUnion(buffer)->p ;
1300 printf(
"getSFNodeField %d : strPtr=%s\n",__LINE__,strPtr);
1303 *vp = STRING_TO_JSVAL(JS_NewStringCopyZ(cx,strPtr));
1307 printf(
"but the buffer is empty\n") ;
1312 printf(
"but this variable itself (%s) is not a ring buffer item\n",_id_c) ;
1319 fieldOffsetsPtr = getFOP(ptr->handle,_id_c);
1320 if (fieldOffsetsPtr == NULL) {
1321#if JS_VERSION >= 185
1326 #ifdef JSVRMLCLASSESVERBOSE
1327 printf (
"ptr=%p _id_c=%s node=%p node->_nodeType=%d stringNodeType=%s\n",ptr,_id_c,node,node->_nodeType,stringNodeType(node->_nodeType)) ;
1328 printf (
"getSFNodeField, fieldOffsetsPtr is %d for node %u, field %s\n",fieldOffsetsPtr, ptr->handle, _id_c);
1330#if JS_VERSION >= 185
1341 switch (*(fieldOffsetsPtr+2)) {
1342 case FIELDTYPE_SFBool:
1343 case FIELDTYPE_SFFloat:
1344 case FIELDTYPE_SFTime:
1345 case FIELDTYPE_SFDouble:
1346 case FIELDTYPE_SFInt32:
1347 case FIELDTYPE_SFString:
1348 X3D_ECMA_TO_JS(cx, offsetPointer_deref (
void *, node, *(fieldOffsetsPtr+1)),
1349 returnElementLength(*(fieldOffsetsPtr+2)), *(fieldOffsetsPtr+2), vp);
1351 case FIELDTYPE_SFColor:
1352 case FIELDTYPE_SFNode:
1353 case FIELDTYPE_SFVec2f:
1354 case FIELDTYPE_SFVec3f:
1355 case FIELDTYPE_SFVec3d:
1356 case FIELDTYPE_SFRotation:
1357 X3D_SF_TO_JS(cx, obj, offsetPointer_deref (
void *, node, *(fieldOffsetsPtr+1)),
1358 returnElementLength(*(fieldOffsetsPtr+2)) * returnElementRowSize(*(fieldOffsetsPtr+2)) , *(fieldOffsetsPtr+2), vp);
1360 case FIELDTYPE_MFColor:
1361 case FIELDTYPE_MFVec3f:
1362 case FIELDTYPE_MFVec2f:
1363 case FIELDTYPE_MFFloat:
1364 case FIELDTYPE_MFTime:
1365 case FIELDTYPE_MFInt32:
1366 case FIELDTYPE_MFString:
1367 case FIELDTYPE_MFNode:
1368 case FIELDTYPE_MFRotation:
1369 case FIELDTYPE_SFImage:
1370 X3D_MF_TO_JS(cx, obj, offsetPointer_deref (
void *, node, *(fieldOffsetsPtr+1)), *(fieldOffsetsPtr+2), vp,
1371 (
char *)FIELDNAMES[*(fieldOffsetsPtr+0)]);
1373 default: printf (
"unhandled type FIELDTYPE_ %d in getSFNodeField\n", *(fieldOffsetsPtr+2)) ;
1377 #ifdef JSVRMLCLASSESVERBOSE
1378 printf (
"end of getSFNodeField\n");
1386JSBool setSFNodeField (JSContext *cx, JSObject *obj, jsid
id, jsval *vp) {
1387#elif JS_VERSION == 185
1388JSBool setSFNodeField (JSContext *cx, JSObject *obj, jsid
id, JSBool strict, jsval *vp){
1390JSBool setSFNodeField (JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
1391 JSObject *obj = *hobj._;
1397 int *fieldOffsetsPtr;
1403 _id_c = JS_GetStringBytes(JSVAL_TO_STRING(
id));
1405 _id_c = JS_EncodeString(cx,JSID_TO_STRING(
id));
1408 #ifdef JSVRMLCLASSESVERBOSE
1409 printf (
"\nsetSFNodeField called on name %s object %u, jsval %u\n",_id_c, obj, *vp);
1413 if ((ptr = (
SFNodeNative *)JS_GetPrivateFw(cx, obj)) == NULL) {
1414 printf(
"JS_GetPrivate failed in setSFNodeField.\n");
1415#if JS_VERSION >= 185
1422 node = (
struct X3D_Node *) ptr->handle;
1425 printf (
"setSFNodeField, can not set field \"%s\", NODE is NULL!\n",_id_c);
1426#if JS_VERSION >= 185
1432 #ifdef JSVRMLCLASSESVERBOSE
1433 printf (
"so then, we have a node of type %s\n",stringNodeType(node->_nodeType));
1437 #ifdef JSVRMLCLASSESVERBOSE
1439 fieldOffsetsPtr = getFOP(ptr->handle,
"FIFOsize");
1441 if (fieldOffsetsPtr == NULL) {
1442 printf(
"setSFNodeField : This is not a ringBuffer type\n");
1444 printf(
"setSFNodeField : This is a ringBuffer type\n");
1451 fieldOffsetsPtr = getFOP(ptr->handle,_id_c);
1452#if JS_VERSION >= 185
1455 if (fieldOffsetsPtr == NULL) {
1464 #ifdef JSVRMLCLASSESVERBOSE
1465 printf (
"and a field type of %s\n",FIELDTYPES[*(fieldOffsetsPtr+2)]);
1468 switch (*(fieldOffsetsPtr+2)) {
1469 case FIELDTYPE_SFBool:
1470 case FIELDTYPE_SFFloat:
1471 case FIELDTYPE_SFTime:
1472 case FIELDTYPE_SFDouble:
1473 case FIELDTYPE_SFInt32:
1474 case FIELDTYPE_SFString:
1475 JS_ECMA_TO_X3D(cx, ((
void *)( ((
unsigned char *) node) + *(fieldOffsetsPtr+1))),
1476 returnElementLength(*(fieldOffsetsPtr+2)), *(fieldOffsetsPtr+2), vp);
1478 case FIELDTYPE_SFColor:
1479 case FIELDTYPE_SFNode:
1480 case FIELDTYPE_SFVec2f:
1481 case FIELDTYPE_SFVec3f:
1482 case FIELDTYPE_SFVec3d:
1483 case FIELDTYPE_SFRotation:
1484 JS_SF_TO_X3D(cx, ((
void *)( ((
unsigned char *) node) + *(fieldOffsetsPtr+1))),
1485 returnElementLength(*(fieldOffsetsPtr+2)) * returnElementRowSize(*(fieldOffsetsPtr+2)) , *(fieldOffsetsPtr+2), vp);
1487 case FIELDTYPE_MFColor:
1488 case FIELDTYPE_MFVec3f:
1489 case FIELDTYPE_MFVec2f:
1490 case FIELDTYPE_MFFloat:
1491 case FIELDTYPE_MFTime:
1492 case FIELDTYPE_MFInt32:
1493 case FIELDTYPE_MFString:
1494 case FIELDTYPE_MFNode:
1495 case FIELDTYPE_MFRotation:
1496 case FIELDTYPE_SFImage:
1497 JS_MF_TO_X3D(cx, obj, ((
void *)( ((
unsigned char *) node) + *(fieldOffsetsPtr+1))), *(fieldOffsetsPtr+2), vp);
1499 default: printf (
"unhandled type in setSFNodeField\n");
1506 #ifdef JSVRMLCLASSESVERBOSE
1507 printf (
"end of setSFNodeField\n");
1513#define UNHIDE_DEFINE_SFNODESPECIFIC 1
1514#ifdef UNHIDE_DEFINE_SFNODESPECIFIC
1516int JS_DefineSFNodeSpecificProperties (JSContext *context, JSObject *
object,
struct X3D_Node * ptr) {
1517 int *fieldOffsetsPtr;
1518 jsval rval = INT_TO_JSVAL(0);
1519 uintN attrs = JSPROP_PERMANENT
1521#ifdef JSPROP_EXPORTED
1528 #ifdef JSVRMLCLASSESVERBOSE
1536 #ifdef JSVRMLCLASSESVERBOSE
1537 nodeName = parser_getNameFromNode(ptr) ;
1538 if (nodeName == NULL) {
1539 printf (
"\nStart of JS_DefineSFNodeSpecificProperties for '---' ... working on node %u object %u (%p,%p)\n",ptr,
object,ptr,
object);
1541 printf (
"\nStart of JS_DefineSFNodeSpecificProperties for '%s' ... working on node %u object %u (%p,%p)\n",nodeName,ptr,
object,ptr,
object);
1542 confirmNode = parser_getNodeFromName(nodeName);
1543 if (confirmNode == NULL) {
1544 printf(
"RoundTrip failed : ptr (%p) -> nodeName (%s) -----\n",ptr,nodeName) ;
1546 printf(
"RoundTrip OK : ptr (%p) -> nodeName (%s) -> confirmNode (%p)\n",ptr,nodeName,confirmNode) ;
1552 #ifdef JSVRMLCLASSESVERBOSE
1553 printf (
"...JS_DefineSFNodeSpecificProperties... it is a %s\n",stringNodeType(ptr->_nodeType));
1557 if ((nodeNative = (
SFNodeNative *)JS_GetPrivateFw(context,
object)) == NULL) {
1558 printf (
"JS_DefineSFNodeSpecificProperties, can not get private for a SFNode!\n");
1561 if(SM_method() == 0)
1562 if (nodeNative->fieldsExpanded) {
1563 #ifdef JSVRMLCLASSESVERBOSE
1564 printf (
"JS_DefineSFNodeSpecificProperties, already done for node\n");
1570 fieldOffsetsPtr = (
int *) NODE_OFFSETS[ptr->_nodeType];
1576 while (*fieldOffsetsPtr != -1) {
1578 #ifdef JSVRMLCLASSESVERBOSE
1579 printf (
"looking at field %s type %s\n",FIELDNAMES[*fieldOffsetsPtr],FIELDTYPES[*(fieldOffsetsPtr+2)]);
1583 if( 0 == strcmp(
"FreeWRL_PROTOInterfaceNodes",FIELDNAMES[*fieldOffsetsPtr])) {
1585 #ifdef JSVRMLCLASSESVERBOSE
1586 printf (
"%s:%d Mangle %s before calling JS_DefineProperty ....\n",__FILE__,__LINE__,FIELDNAMES[*fieldOffsetsPtr]);
1590 char *saveptr1 = NULL;
1594 for (i=0; i < X3D_GROUP(ptr)->FreeWRL_PROTOInterfaceNodes.n; i++) {
1595 rval = INT_TO_JSVAL(*fieldOffsetsPtr);
1596 name = parser_getNameFromNode(X3D_GROUP(ptr)->FreeWRL_PROTOInterfaceNodes.p[i]);
1598 #ifdef JSVRMLCLASSESVERBOSE
1599 dump_scene(stdout,0,X3D_GROUP(ptr)->FreeWRL_PROTOInterfaceNodes.p[i]);
1600 printf (
"%s:%d dummy name=%s\n",__FILE__,__LINE__,name);
1603 str1 = MALLOC(
void *, 1+strlen(name));
1606 token = strtok_r(str1,
"_", &saveptr1);
1608 token = strtok_r(str1,
"_", &saveptr1);
1611 #ifdef JSVRMLCLASSESVERBOSE
1612 printf (
"%s:%d would call JS_DefineProperty on (context=%p, object=%p, name=%s, rval=%p), setting getSFNodeField, setSFNodeField\n",__FILE__,__LINE__,context,
object,name,rval);
1614 if (!JS_DefineProperty(context,
object, name, rval, getSFNodeField, setSFNodeField, attrs)) {
1615 printf(
"JS_DefineProperty failed for \"%s\" in JS_DefineSFNodeSpecificProperties.\n", name);
1619 }
else if (FIELDNAMES[*fieldOffsetsPtr][0] !=
'_') {
1621 if (FIELDNAMES[*fieldOffsetsPtr][0] !=
'_') {
1624 name = (
char *)FIELDNAMES[*fieldOffsetsPtr];
1625 rval = INT_TO_JSVAL(*fieldOffsetsPtr);
1632 #ifdef JSVRMLCLASSESVERBOSE
1633 printf (
"calling JS_DefineProperty on (context=%p, object=%p, name=%s, rval=%p), setting getSFNodeField, setSFNodeField\n",context,
object,name,rval);
1636 if (!JS_DefineProperty(context,
object, name, rval, getSFNodeField, setSFNodeField, attrs)) {
1637 printf(
"JS_DefineProperty failed for \"%s\" in JS_DefineSFNodeSpecificProperties.\n", name);
1641 fieldOffsetsPtr += FIELDOFFSET_LENGTH;
1645 if(SM_method() == 0)
1646 nodeNative->fieldsExpanded = TRUE;
1648 #ifdef JSVRMLCLASSESVERBOSE
1649 printf (
"JS_DefineSFNodeSpecificProperties, returning TRUE\n");
1680#define SET_TOUCHED_TYPE_MF_A(thisMFtype,thisSFtype) \
1681 else if (JS_InstanceOf (cx, obj, &thisMFtype##Class, NULL)) {\
1683 thisSFtype##Native *ptr; \
1685 if (!JS_GetElement(cx, obj, num, &mainElement)) { \
1686 printf ("JS_GetElement failed for %d in get_valueChanged_flag\n",num); \
1690 if ((ptr = (thisSFtype##Native *)JS_GetPrivateFw(cx, JSVAL_TO_OBJECT(mainElement))) == NULL) {\
1691 printf( "JS_GetPrivate failed in assignCheck.\n"); \
1695 ptr->valueChanged++; \
1702JSBool js_SetPropertyCheck (JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
1703#elif JS_VERSION == 185
1704JSBool js_SetPropertyCheck(JSContext *cx, JSObject *obj, jsid iid, JSBool strict, jsval *vp) {
1706JSBool js_SetPropertyCheck(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
1707 JSObject *obj = *hobj._;
1712#if JS_VERSION >= 185
1714 if (!JS_IdToValue(cx,iid,&
id)) {
1715 printf(
"js_SetPropertyCheck: JS_IdToValue failed.\n");
1720#ifdef JAVASCRIPTVERBOSE
1721 char *_id_c =
"(no value in string)";
1723 if (JSVAL_IS_STRING(
id)) {
1731 }
else if (JSVAL_IS_DOUBLE(
id)) {
1733 _id_c = JS_GetStringBytes(JSVAL_TO_STRING(
id));
1735 _id_c = JS_EncodeString(cx,JSVAL_TO_STRING(
id));
1737 printf (
"\n...js_SetPropertyCheck called on double %s object %u, jsval %u\n",_id_c, obj, *vp);
1738#if JS_VERSION >= 185
1741 }
else if (JSVAL_IS_INT(
id)) {
1742 num = JSVAL_TO_INT(
id);
1743 printf (
"\n...js_SetPropertyCheck called on number %d object %u, jsval %u\n",num, obj, *vp);
1745 printf (
"hmmm...js_SetPropertyCheck called on unknown type of object %u, jsval %u\n", obj, *vp);
1751 if (JS_InstanceOf (cx, obj, &MFStringClass, NULL)) {
1752 SET_MF_ECMA_HAS_CHANGED;
1755 else if (JS_InstanceOf (cx, obj, &MFFloatClass, NULL)) {
1756 SET_MF_ECMA_HAS_CHANGED;
1759 else if (JS_InstanceOf (cx, obj, &MFInt32Class, NULL)) {
1760 SET_MF_ECMA_HAS_CHANGED;
1765 else if (JS_InstanceOf (cx, obj, &MFBoolClass, NULL)) {
1766 SET_MF_ECMA_HAS_CHANGED;
1772 SET_TOUCHED_TYPE_MF_A(MFNode,SFNode)
1773 SET_TOUCHED_TYPE_MF_A(MFVec2f,
SFVec2f)
1774 SET_TOUCHED_TYPE_MF_A(MFVec3f,
SFVec3f)
1776 SET_TOUCHED_TYPE_MF_A(MFColor,
SFColor)
1780 #ifdef JSVRMLCLASSESVERBOSE
1781 printf (
"this is a class of "); printJSNodeType (cx,obj);
1791JSBool js_GetPropertyDebug (JSContext *context, JSObject *obj, jsval
id, jsval *vp) {
1793JSBool js_GetPropertyDebug (JSContext *context, JSObject *obj, jsid iid, jsval *vp) {
1795 #ifdef JSVRMLCLASSESVERBOSE
1796 char *_id_c =
"(no value in string)";
1799#if JS_VERSION >= 185
1801 if (!JS_IdToValue(context,iid,&
id)) {
1802 printf(
"js_GetPropertyDebug: JS_IdToValue failed -- NOT returning false\n");
1806 if (JSVAL_IS_STRING(
id)) {
1808 _id_c = JS_GetStringBytes(JSVAL_TO_STRING(
id));
1810 _id_c = JS_EncodeString(context,JSVAL_TO_STRING(
id));
1812 printf (
"\n...js_GetPropertyDebug called on string \"%s\" object %u, jsval %lu\n",_id_c, (
unsigned int) obj, *vp);
1813#if JS_VERSION >= 185
1814 JS_free(context,_id_c);
1816 }
else if (JSVAL_IS_INT(
id)) {
1817 num = JSVAL_TO_INT(
id);
1818 printf (
"\n...js_GetPropertyDebug called on number %d object %u, jsval %lu\n",num, (
unsigned int) obj, *vp);
1820 printf (
"\n...js_GetPropertyDebug called on unknown type of object %u, jsval %lu\n", (
unsigned int) obj, *vp);
1826#ifdef JSVRMLCLASSESVERBOSE
1828void js_SetPropertyDebugWrapped (JSContext *context, JSObject *obj, jsval
id, jsval *vp,
char *debugString) {
1830void js_SetPropertyDebugWrapped (JSContext *context, JSObject *obj, jsid iid, jsval *vp,
char *debugString) {
1832 char *_id_c =
"(no value in string)";
1834#if JS_VERSION >= 185
1836 if (!JS_IdToValue(context,iid,&
id)) {
1837 printf(
"js_GetPropertyDebug: JS_IdToValue failed\n");
1842 if (JSVAL_IS_STRING(
id)) {
1844 _id_c = JS_GetStringBytes(JSVAL_TO_STRING(
id));
1846 _id_c = JS_EncodeString(context,JSVAL_TO_STRING(
id));
1848 printf (
"\n...js_SetPropertyDebug%s called on string \"%s\" object %p, jsval %lu\n",debugString,_id_c, obj, *vp);
1849#if JS_VERSION >= 185
1850 JS_free(context,_id_c);
1852 }
else if (JSVAL_IS_INT(
id)) {
1853 num = JSVAL_TO_INT(
id);
1854 printf (
"\n...js_SetPropertyDebug%s called on number %d object %p, jsval %lu\n",debugString,num, obj, *vp);
1856 printf (
"\n...js_SetPropertyDebug%s called on unknown type of object %p, jsval %lu\n",debugString, obj, *vp);
1862JSBool js_SetPropertyDebug (JSContext *context, JSObject *obj, jsval
id, jsval *vp) {
1864JSBool js_SetPropertyDebug (JSContext *context, JSObject *obj, jsid
id, JSBool strict, jsval *vp) {
1866 #ifdef JSVRMLCLASSESVERBOSE
1867 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"");
1873JSBool js_SetPropertyDebug1 (JSContext *context, JSObject *obj, jsval
id, jsval *vp) {
1875JSBool js_SetPropertyDebug1 (JSContext *context, JSObject *obj, jsid
id, JSBool strict, jsval *vp) {
1877 #ifdef JSVRMLCLASSESVERBOSE
1878 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"1");
1883JSBool js_SetPropertyDebug2 (JSContext *context, JSObject *obj, jsval
id, jsval *vp) {
1885JSBool js_SetPropertyDebug2 (JSContext *context, JSObject *obj, jsid
id, JSBool strict, jsval *vp) {
1887 #ifdef JSVRMLCLASSESVERBOSE
1888 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"2");
1893JSBool js_SetPropertyDebug3 (JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
1894#elif JS_VERSION == 185
1895JSBool js_SetPropertyDebug3 (JSContext *cx, JSObject *obj, jsid
id, JSBool strict, jsval *vp) {
1897JSBool js_SetPropertyDebug3 (JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
1898 JSObject *obj = *hobj._;
1902 #ifdef JSVRMLCLASSESVERBOSE
1903 js_SetPropertyDebugWrapped(cx,obj,
id,vp,
"3");
1908JSBool js_SetPropertyDebug4 (JSContext *context, JSObject *obj, jsval
id, jsval *vp) {
1910JSBool js_SetPropertyDebug4 (JSContext *context, JSObject *obj, jsid
id, JSBool strict, jsval *vp) {
1912 #ifdef JSVRMLCLASSESVERBOSE
1913 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"4");
1918JSBool js_SetPropertyDebug5 (JSContext *context, JSObject *obj, jsval
id, jsval *vp) {
1919#elif JS_VERSION == 185
1920JSBool js_SetPropertyDebug5(JSContext *cx, JSObject *obj, jsid
id, JSBool strict, jsval *vp){
1922JSBool js_SetPropertyDebug5(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
1923 JSObject *obj = *hobj._;
1927 #ifdef JSVRMLCLASSESVERBOSE
1928 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"5");
1933JSBool js_SetPropertyDebug6 (JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
1934#elif JS_VERSION == 185
1935JSBool js_SetPropertyDebug6 (JSContext *cx, JSObject *obj, jsid
id, JSBool strict, jsval *vp) {
1937JSBool js_SetPropertyDebug6 (JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
1938 JSObject *obj = *hobj._;
1942 #ifdef JSVRMLCLASSESVERBOSE
1943 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"6");
1948JSBool js_SetPropertyDebug7 (JSContext *context, JSObject *obj, jsval
id, jsval *vp) {
1950JSBool js_SetPropertyDebug7 (JSContext *context, JSObject *obj, jsid
id, JSBool strict, jsval *vp) {
1952 #ifdef JSVRMLCLASSESVERBOSE
1953 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"7");
1958JSBool js_SetPropertyDebug8 (JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
1959#elif JS_VERSION == 185
1960JSBool js_SetPropertyDebug8 (JSContext *cx, JSObject *obj, jsid
id, JSBool strict, jsval *vp) {
1962JSBool js_SetPropertyDebug8 (JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
1963 JSObject *obj = *hobj._;
1967 #ifdef JSVRMLCLASSESVERBOSE
1968 js_SetPropertyDebugWrapped(cx,obj,
id,vp,
"8");
1973JSBool js_SetPropertyDebug9 (JSContext *context, JSObject *obj, jsval
id, jsval *vp) {
1975JSBool js_SetPropertyDebug9 (JSContext *context, JSObject *obj, jsid
id, JSBool strict, jsval *vp) {
1977 #ifdef JSVRMLCLASSESVERBOSE
1978 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"9");