44#define STRING_SIZE 256
48#define jsuint uint32_t
50#define jsdouble double
52#define JS_FinalizeStub NULL
87#include "jsUtils_sm.h"
88#include "jsVRMLClasses_sm.h"
91 #include "../scenegraph/ringbuf.h"
93 #define TRACK_FIFO_MSG 0
96 #define TRACK_FIFO_MSG 0
99extern void dump_scene (FILE *fp,
int level,
struct X3D_Node* node);
100extern char *parser_getNameFromNode(
struct X3D_Node *ptr) ;
114typedef struct pjsUtils{
116 JSBool reportWarnings;
119void *jsUtils_constructor(){
120 void *v = MALLOCV(
sizeof(
struct pjsUtils));
121 memset(v,0,
sizeof(
struct pjsUtils));
124void jsUtils_init(
struct iiglobal::tjsUtils *t){
127 t->prv = jsUtils_constructor();
129 ppjsUtils p = (ppjsUtils)t->prv;
130 p->insetSFStr = FALSE;
131 p->reportWarnings = JS_TRUE;
137int JS_SetPrivateFw(JSContext *cx, JSObject* obj,
void *data){
139 JS_SetPrivate(obj, data);
142JSObject* JS_NewGlobalObjectFw(JSContext *cx, JSClass *clasp){
143 return JS_NewGlobalObject(cx, clasp, NULL);
145void * JS_GetPrivateFw(JSContext *cx,JSObject* obj){
146 return JS_GetPrivate(obj);
148JSObject* JS_GetParentFw(JSContext *cx, JSObject *obj){
149 return JS_GetParent(obj);
154JSBool JS_NewNumberValue(JSContext *cx, jsdouble d, jsval *rval){
155 *rval = JS_NumberValue(d);
162JS_ConstructObjectWithArgumentsFw(JSContext *cx, JSClass *clasp,
163 JSObject *parent,
unsigned argc, jsval *argv)
165 JSObject *global = JS_GetGlobalForScopeChain(cx);
167 if (!global || !JS_GetProperty(cx, global, clasp->name, &v))
169 if (JSVAL_IS_PRIMITIVE(v)) {
170 JS_ReportError(cx,
"cannot construct object: constructor is gone");
173 return JS_New(cx, JSVAL_TO_OBJECT(v), argc, argv);
177JS_ConstructObjectFw(JSContext *cx, JSClass *clasp,
void *whatever, JSObject *parent)
179 return JS_ConstructObjectWithArgumentsFw(cx, clasp, parent, 0, NULL);
181JSClass* JS_GetClassFw(JSContext *cx, JSObject *obj){
182 return JS_GetClass(obj);
184JSObject * JS_GetPrototypeFw(JSContext *cx, JSObject * obj){
187 if( JS_GetPrototype(cx,obj,&proto))
189 if(proto = JS_GetPrototype(obj))
198static JSBool setSF_in_MF (JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
199 JSObject *obj = *hobj.address();
200 jsid iid = *hiid.address();
201 jsval *vp = hvp.address();
209 ppjsUtils p = (ppjsUtils)gglobal()->jsUtils.prv;
217 if (!JS_IdToValue(cx,iid,&
id)) {
218 printf(
"setSF_in_MF: JS_IdToValue failed.\n");
226 #ifdef JSVRMLCLASSESVERBOSE
227 printf (
"setSF_in_MF: already caught this value; this is our JS_SetElement call\n");
233 p->insetSFStr = TRUE;
235 if (JSVAL_IS_INT(
id)) {
242 if (!JS_GetElement(cx, obj, num, &ele)) {
243 printf (
"error getting child %ld in setSF_in_MF\n",num);
248 if (!JS_SetElement(cx,obj,num,vp)) {
249 printf (
"can not set element %ld in MFString\n",num);
253 printf (
"expect an integer id in setSF_in_MF\n");
260 par = JS_GetParentFw(cx, me);
261 while (par != NULL) {
262 #ifdef JSVRMLCLASSESVERBOSE
263 printf (
"for obj %u: ",me);
264 printJSNodeType(cx,me);
265 printf (
"... parent %u\n",par);
266 printJSNodeType(cx,par);
269 if (JS_InstanceOf (cx, par, &SFNodeClass, NULL)) {
270 #ifdef JSVRMLCLASSESVERBOSE
271 printf (
" the parent IS AN SFNODE - it is %u\n",par);
275 if (!JS_GetProperty(cx, obj,
"_parentField", &pf)) {
276 printf (
"doMFSetProperty, can not get parent field from this object\n");
280 nf = OBJECT_TO_JSVAL(me);
282 if (!JS_ValueToId(cx,pf,&oid)) {
283 printf(
"setSF_in_MF: JS_ValueToId failed.\n");
302 par = JS_GetParentFw(cx, me);
304 p->insetSFStr = FALSE;
310void JS_ECMA_TO_X3D(JSContext *cx,
void *Data,
unsigned datalen,
int dataType, jsval *newval) {
315 #ifdef JSVRMLCLASSESVERBOSE
316 printf (
"calling JS_ECMA_TO_X3D on type %s\n",FIELDTYPES[dataType]);
321 case FIELDTYPE_SFFloat: {
322 if (!JS_ValueToNumber(cx,*newval,&dl)) {
323 printf (
"problems converting Javascript val to number\n");
327 memcpy (Data, (
void *) &fl, datalen);
330 case FIELDTYPE_SFDouble:
331 case FIELDTYPE_SFTime: {
332 if (!JS_ValueToNumber(cx,*newval,&dl)) {
333 printf (
"problems converting Javascript val to number\n");
336 memcpy (Data, (
void *) &dl, datalen);
339 case FIELDTYPE_SFBool: {
341 JS_ValueToBoolean(cx, *newval, &il);
342 memcpy (Data, (
void *) &il, datalen);
346 case FIELDTYPE_SFInt32: {
348 JS_ValueToInt32(cx, *newval, &il);
349 memcpy (Data, (
void *) &il, datalen);
353 case FIELDTYPE_SFString: {
358 _idStr = JS_ValueToString(cx, *newval);
359 _id_c = JS_EncodeString(cx,_idStr);
361 oldS = (
struct Uni_String *) *((intptr_t *)Data);
363 *(
struct Uni_String **)Data = newASCIIString(_id_c);
365 #ifdef JSVRMLCLASSESVERBOSE
366 printf (
"JS_ECMA_TO_X3D, replacing \"%s\" with \"%s\" \n", oldS->strptr, _id_c);
370 verify_Uni_String (oldS,_id_c);
375 default: { printf(
"WARNING: SHOULD NOT BE HERE in JS_ECMA_TO_X3D! %d\n",dataType); }
381void JS_SF_TO_X3D(JSContext *cx,
void *Data,
unsigned datalen,
int dataType, jsval *newval) {
383 SFVec3fNative *V3ptr;
384 SFVec3dNative *V3dptr;
385 SFVec2fNative *V2ptr;
386 SFRotationNative *VRptr;
391 #ifdef JSVRMLCLASSESVERBOSE
392 printf (
"calling JS_SF_TO_X3D on type %s\n",FIELDTYPES[dataType]);
396 if ((VPtr = JS_GetPrivateFw(cx, JSVAL_TO_OBJECT(*newval))) == NULL) {
397 printf(
"JS_GetPrivate failed in JS_SF_TO_X3D.\n");
403 case FIELDTYPE_SFColor:
404 Cptr = (SFColorNative *)VPtr;
405 memcpy (Data, (
void *)((Cptr->v).c), datalen);
407 case FIELDTYPE_SFVec3d:
408 V3dptr = (SFVec3dNative *)VPtr;
409 memcpy (Data, (
void *)((V3dptr->v).c), datalen);
411 case FIELDTYPE_SFVec3f:
412 V3ptr = (SFVec3fNative *)VPtr;
413 memcpy (Data, (
void *)((V3ptr->v).c), datalen);
415 case FIELDTYPE_SFVec2f:
416 V2ptr = (SFVec2fNative *)VPtr;
417 memcpy (Data, (
void *)((V2ptr->v).c), datalen);
419 case FIELDTYPE_SFRotation:
420 VRptr = (SFRotationNative *)VPtr;
421 memcpy (Data,(
void *)((VRptr->v).c), datalen);
423 case FIELDTYPE_SFNode:
424 VNptr = (SFNodeNative *)VPtr;
425 memcpy (Data, (
void *)(VNptr->handle), datalen);
428 default: { printf(
"WARNING: SHOULD NOT BE HERE! %d\n",dataType); }
432void JS_SF_TO_X3D_B(JSContext *cx,
void *Data,
int dataType,
int *valueChanged, jsval *newval) {
437 if ((ptr = (AnyNative*)JS_GetPrivateFw(cx, JSVAL_TO_OBJECT(*newval))) == NULL) {
438 printf(
"JS_GetPrivate failed in JS_SF_TO_X3D_B.\n");
441 if(ptr->type != dataType){
442 printf(
"JS assigning type %d to %d failed\n",ptr->type,dataType);
445 shallow_copy_field(dataType,ptr->v,(
union anyVrml*)Data);
447void JS_SF_TO_X3D_BNode(JSContext *cx,
void *Data,
int dataType,
int *valueChanged, jsval *newval) {
450 if(JSVAL_IS_NULL(*newval)){
453 shallow_copy_field(dataType,&any,(
union anyVrml*)Data);
455 JS_SF_TO_X3D_B(cx, Data, dataType, valueChanged, newval);
461void getJSMultiNumType(JSContext *,
struct Multi_Vec3f *,
int);
464void JS_MF_TO_X3D(JSContext *cx, JSObject * obj,
void *Data,
int dataType, jsval *newval) {
465 ttglobal tg = gglobal();
466 #ifdef JSVRMLCLASSESVERBOSE
467 printf (
"calling JS_MF_TO_X3D on type %s\n",FIELDTYPES[dataType]);
468 printf (
"JS_MF_TO_X3D, we have object %u, newval %u\n",obj,*newval);
469 printf (
"JS_MF_TO_X3D, obj is an:\n");
470 if (JSVAL_IS_OBJECT(OBJECT_TO_JSVAL(obj))) { printf (
"JS_MF_TO_X3D - obj is an OBJECT\n"); }
471 if (JSVAL_IS_PRIMITIVE(OBJECT_TO_JSVAL(obj))) { printf (
"JS_MF_TO_X3D - obj is an PRIMITIVE\n"); }
472 printf (
"JS_MF_TO_X3D, obj is a "); printJSNodeType(cx,obj);
473 printf (
"JS_MF_TO_X3D, vp is an:\n");
474 if (JSVAL_IS_OBJECT(*newval)) { printf (
"JS_MF_TO_X3D - vp is an OBJECT\n"); }
475 if (JSVAL_IS_PRIMITIVE(*newval)) { printf (
"JS_MF_TO_X3D - vp is an PRIMITIVE\n"); }
476 printf (
"JS_MF_TO_X3D, vp is a "); printJSNodeType(cx,JSVAL_TO_OBJECT(*newval));
479 *(jsval *)tg->JScript.JSglobal_return_val = *newval;
480 getJSMultiNumType (cx, (
struct Multi_Vec3f*) Data, convertToSFType(dataType));
488void X3D_ECMA_TO_JS(JSContext *cx,
void *Data,
int datalen,
int dataType, jsval *newval) {
495 #ifdef JSVRMLCLASSESVERBOSE
496 printf (
"calling X3D_ECMA_TO_JS on type %s\n",FIELDTYPES[dataType]);
501 case FIELDTYPE_SFFloat: {
502 memcpy ((
void *) &fl, Data, datalen);
503 JS_NewNumberValue(cx,(
double)fl,newval);
506 case FIELDTYPE_SFDouble:
507 case FIELDTYPE_SFTime: {
508 memcpy ((
void *) &dl, Data, datalen);
509 JS_NewNumberValue(cx,dl,newval);
512 case FIELDTYPE_SFBool:
513 case FIELDTYPE_SFInt32: {
514 memcpy ((
void *) &il,Data, datalen);
515 *newval = INT_TO_JSVAL(il);
519 case FIELDTYPE_SFString: {
527 *newval = STRING_TO_JSVAL(JS_NewStringCopyZ(cx,ms->strptr));
530 default: { printf(
"WARNING: SHOULD NOT BE HERE in X3D_ECMA_TO_JS! %d\n",dataType); }
536void X3D_SF_TO_JS(JSContext *cx, JSObject *obj,
void *Data,
unsigned datalen,
int dataType, jsval *newval) {
538 SFVec3fNative *V3ptr;
539 SFVec3dNative *V3dptr;
540 SFVec2fNative *V2ptr;
541 SFRotationNative *VRptr;
546 const char *script = NULL;
550 #ifdef JSVRMLCLASSESVERBOSE
551 printf (
"calling X3D_SF_TO_JS on type %s, newval %u\n",FIELDTYPES[dataType],*newval);
555 if(!(*newval).isObject()) {
558 case FIELDTYPE_SFVec2f: script =
"new SFVec2f()";
break;
559 case FIELDTYPE_SFVec3f: script =
"new SFVec3f()";
break;
560 case FIELDTYPE_SFVec4f: script =
"new SFVec4f()";
break;
561 case FIELDTYPE_SFVec2d: script =
"new SFVec2d()";
break;
562 case FIELDTYPE_SFVec3d: script =
"new SFVec3d()";
break;
563 case FIELDTYPE_SFVec4d: script =
"new SFVec4d()";
break;
564 case FIELDTYPE_SFColor: script =
"new SFColor()";
break;
565 case FIELDTYPE_SFColorRGBA: script =
"new SFColorRGBA()";
break;
566 case FIELDTYPE_SFNode: script =
"new SFNode()";
break;
567 case FIELDTYPE_SFRotation: script =
"new SFRotation()";
break;
569 printf (
"invalid type in X3D_SF_TO_JS\n");
return;
575 #ifdef JSVRMLCLASSESVERBOSE
576 printf (
"X3D_SF_TO_JS, have to run script to make new object: \"%s\"\n",script);
579 if (!JS_EvaluateScript(cx, obj, script, (
int) strlen(script), FNAME_STUB, LINENO_STUB, &rval)) {
580 printf (
"error creating the new object in X3D_SF_TO_JS, script :%s:\n",script);
587 #ifdef JSVRMLCLASSESVERBOSE
588 printf (
"X3D_SF_TO_JS, so, newval now is %u\n",*newval);
593 if ((VPtr = JS_GetPrivateFw(cx, JSVAL_TO_OBJECT(*newval))) == NULL) {
594 printf(
"JS_GetPrivate failed in X3D_SF_TO_JS.\n");
601 case FIELDTYPE_SFColor:
602 Cptr = (SFColorNative *)VPtr;
603 memcpy ((
void *)((Cptr->v).c), Data, datalen);
604 Cptr->valueChanged = 1;
606 case FIELDTYPE_SFVec3f:
607 V3ptr = (SFVec3fNative *)VPtr;
608 memcpy ((
void *)((V3ptr->v).c), Data, datalen);
609 V3ptr->valueChanged = 1;
611 case FIELDTYPE_SFVec3d:
612 V3dptr = (SFVec3dNative *)VPtr;
613 memcpy ((
void *)((V3dptr->v).c), Data, datalen);
614 V3dptr->valueChanged = 1;
616 case FIELDTYPE_SFVec2f:
617 V2ptr = (SFVec2fNative *)VPtr;
618 memcpy ((
void *)((V2ptr->v).c), Data, datalen);
619 V2ptr->valueChanged = 1;
621 case FIELDTYPE_SFRotation:
622 VRptr = (SFRotationNative *)VPtr;
623 memcpy ((
void *)((VRptr->v).c), Data, datalen);
624 VRptr->valueChanged = 1;
626 case FIELDTYPE_SFNode:
627 VNptr = (SFNodeNative *)VPtr;
628 memcpy ((
void *)(&(VNptr->handle)), Data, datalen);
629 VNptr->valueChanged = 1;
632 default: { printf(
"WARNING: SHOULD NOT BE HERE! %d\n",dataType); }
636void X3D_SF_TO_JS_B(JSContext *cx,
void *Data,
unsigned datalen,
int dataType,
int *valueChanged, jsval *newval)
644 #ifdef JSVRMLCLASSESVERBOSE
645 printf (
"calling X3D_SF_TO_JS on type %s, newval %u\n",FIELDTYPES[dataType],*newval);
653 case FIELDTYPE_SFVec2f:
654 newobj = JS_NewObject(cx, &SFVec2fClass, NULL, NULL);
break;
655 case FIELDTYPE_SFVec3f:
656 newobj = JS_NewObject(cx,&SFVec3fClass,NULL,NULL);
break;
657 case FIELDTYPE_SFVec4f:
658 newobj = JS_NewObject(cx, &SFVec4fClass, NULL, NULL);
break;
659 case FIELDTYPE_SFVec2d:
660 newobj = JS_NewObject(cx, &SFVec2dClass, NULL, NULL);
break;
661 case FIELDTYPE_SFVec3d:
662 newobj = JS_NewObject(cx, &SFVec3dClass, NULL, NULL);
break;
663 case FIELDTYPE_SFVec4d:
664 newobj = JS_NewObject(cx,&SFVec4dClass,NULL,NULL);
break;
665 case FIELDTYPE_SFMatrix3f:
666 newobj = JS_NewObject(cx, &SFMatrix3fClass, NULL, NULL);
break;
667 case FIELDTYPE_SFMatrix4f:
668 newobj = JS_NewObject(cx, &SFMatrix4fClass, NULL, NULL);
break;
669 case FIELDTYPE_SFMatrix3d:
670 newobj = JS_NewObject(cx, &SFMatrix3dClass, NULL, NULL);
break;
671 case FIELDTYPE_SFMatrix4d:
672 newobj = JS_NewObject(cx, &SFMatrix4dClass, NULL, NULL);
break;
673 case FIELDTYPE_SFColor:
674 newobj = JS_NewObject(cx,&SFColorClass,NULL,NULL);
break;
675 case FIELDTYPE_SFColorRGBA:
676 newobj = JS_NewObject(cx, &SFColorRGBAClass, NULL, NULL);
break;
677 case FIELDTYPE_SFNode:
678 newobj = JS_NewObject(cx,&SFNodeClass,NULL,NULL);
break;
679 case FIELDTYPE_SFRotation:
680 newobj = JS_NewObject(cx,&SFRotationClass,NULL,NULL);
break;
681 case FIELDTYPE_SFImage:
682 newobj = JS_NewObject(cx, &SFImageClass, NULL, NULL);
break;
684 printf (
"invalid type in X3D_SF_TO_JS\n");
return;
689 if ((ptr = (AnyNative *) AnyNativeNew(dataType,(
union anyVrml*)Data,valueChanged)) == NULL) {
690 printf(
"AnyNativeNew failed in X3D_MF_TO_SF_B.\n");
694 if (!JS_SetPrivateFw(cx, newobj, ptr)) {
695 printf(
"JS_SetPrivate failed in X3D_MF_TO_SF_B.\n");
700 *newval = OBJECT_TO_JSVAL(newobj);
701 #ifdef JSVRMLCLASSESVERBOSE
702 printf (
"X3D_SF_TO_JS_B, so, newval now is %u\n",*newval);
707void X3D_SF_TO_JS_BNode(JSContext *cx,
void *Data,
unsigned datalen,
int dataType,
int *valueChanged, jsval *newval)
710 if(any->sfnode == NULL){
711 *newval = JSVAL_NULL;
713 X3D_SF_TO_JS_B(cx, Data, datalen, dataType, valueChanged, newval);
718void X3D_MF_TO_JS(JSContext *cx, JSObject *obj,
void *Data,
int dataType, jsval *newval,
char *fieldName) {
721 const char *script = NULL;
725 jsval fieldNameAsJSVAL;
731 #ifdef JSVRMLCLASSESVERBOSE
732 printf (
"calling X3D_MF_TO_JS on type %s\n",FIELDTYPES[dataType]);
733 printf (
"X3D_MF_TO_JS, we have object %u, newval %u\n",obj,*newval);
734 printf (
"X3D_MF_TO_JS, obj is an:\n");
735 if (JSVAL_IS_OBJECT(OBJECT_TO_JSVAL(obj))) { printf (
"X3D_MF_TO_JS - obj is an OBJECT\n");
736 printf (
"X3D_MF_TO_JS, obj is a "); printJSNodeType(cx,obj);
738 if (JSVAL_IS_PRIMITIVE(OBJECT_TO_JSVAL(obj))) { printf (
"X3D_MF_TO_JS - obj is an PRIMITIVE\n"); }
739 printf (
"X3D_MF_TO_JS, vp is an:\n");
740 if (JSVAL_IS_OBJECT(*newval)) { printf (
"X3D_MF_TO_JS - newval is an OBJECT\n");
741 printf (
"X3D_MF_TO_JS, newval is a "); printJSNodeType(cx,JSVAL_TO_OBJECT(*newval));
743 if (JSVAL_IS_PRIMITIVE(*newval)) { printf (
"X3D_MF_TO_JS - newval is an PRIMITIVE\n"); }
747#ifdef JSVRMLCLASSESVERBOSE
748 printf (
"X3D_MF_TO_JS - is this already expanded? \n");
753 if ((VNptr = JS_GetPrivate(cx, obj)) == NULL) {
754 printf(
"JS_GetPrivate failed in X3D_MF_TO_JS.\n");
757 if (VNptr->fieldsExpanded) printf (
"FIELDS EXPANDED\n");
758 else printf (
"FIELDS NOT EXPANDED\n");
764 if (!(*newval).isObject()) {
765 #ifdef JSVRMLCLASSESVERBOSE
766 printf (
"X3D_MF_TO_JS - have to create empty MF type \n");
771 case FIELDTYPE_MFString: script =
"new MFString()";
break;
772 case FIELDTYPE_MFFloat: script =
"new MFFloat()";
break;
773 case FIELDTYPE_MFTime: script =
"new MFTime()";
break;
774 case FIELDTYPE_MFInt32: script =
"new MFInt32()";
break;
775 case FIELDTYPE_MFImage: script =
"new MFImage()";
break;
776 case FIELDTYPE_MFVec3f: script =
"new MFVec3f()";
break;
777 case FIELDTYPE_MFColor: script =
"new MFColor()";
break;
778 case FIELDTYPE_MFNode: script =
"new MFNode()";
break;
779 case FIELDTYPE_MFVec2f: script =
"new MFVec2f()";
break;
780 case FIELDTYPE_MFRotation: script =
"new MFRotation()";
break;
781 default: printf (
"invalid type in X3D_MF_TO_JS\n");
return;
784 if (!JS_EvaluateScript(cx, obj, script, (
int) strlen(script), FNAME_STUB, LINENO_STUB, &rval)) {
785 printf (
"error creating the new object in X3D_MF_TO_JS\n");
793 #ifdef JSVRMLCLASSESVERBOSE
794 printf (
"setting parent for %u to %u\n", *newval, obj);
802 if (!JS_SetParent (cx, JSVAL_TO_OBJECT(*newval), obj)) {
803 printf (
"X3D_MF_TO_JS - can not set parent!\n");
806 #ifdef JSVRMLCLASSESVERBOSE
807 printf (
"telling %u that it is a child \"%s\" of parent %u\n",*newval, fieldName, obj);
810 fieldNameAsJSVAL = STRING_TO_JSVAL(JS_NewStringCopyZ(cx,fieldName));
812 if (!JS_DefineProperty(cx, JSVAL_TO_OBJECT(*newval),
"_parentField", fieldNameAsJSVAL,
813 JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_STUB5, JSPROP_READONLY)) {
814 printf(
"JS_DefineProperty failed for \"%s\" in X3D_MF_TO_JS.\n", fieldName);
819 #ifdef JSVRMLCLASSESVERBOSE
820 printf (
"X3D_MF_TO_JS - object is %u, copying over data\n",*newval);
826 case FIELDTYPE_MFInt32:
828 for (i=0; i<MIptr->n; i++) {
829 if (!JS_DefineElement(cx, JSVAL_TO_OBJECT(*newval), (jsint) i, INT_TO_JSVAL(MIptr->p[i]),
830 JS_GET_PROPERTY_STUB, setSF_in_MF, JSPROP_ENUMERATE)) {
831 printf(
"JS_DefineElement failed for arg %u in MFInt32Constr.\n", i);
836 case FIELDTYPE_MFFloat:
838 for (i=0; i<MFptr->n; i++) {
839 if (!JS_DefineElement(cx, JSVAL_TO_OBJECT(*newval), (jsint) i, INT_TO_JSVAL(MFptr->p[i]),
840 JS_GET_PROPERTY_STUB, setSF_in_MF, JSPROP_ENUMERATE)) {
841 printf(
"JS_DefineElement failed for arg %u in MFFloatConstr.\n", i);
846 case FIELDTYPE_MFTime:
848 for (i=0; i<MTptr->n; i++) {
849 if (!JS_DefineElement(cx, JSVAL_TO_OBJECT(*newval), (jsint) i, INT_TO_JSVAL(MTptr->p[i]),
850 JS_GET_PROPERTY_STUB, setSF_in_MF, JSPROP_ENUMERATE)) {
851 printf(
"JS_DefineElement failed for arg %u in MFTimeConstr.\n", i);
856 case FIELDTYPE_MFColor:
857 case FIELDTYPE_MFVec3f: {
863 for (i=0; i<MCptr->n; i++) {
864 if (dataType == FIELDTYPE_MFColor)
865 sprintf (newline,
"new SFColor(%f, %f, %f)", MCptr->p[i].c[0], MCptr->p[i].c[1], MCptr->p[i].c[2]);
867 sprintf (newline,
"new SFColor(%f, %f, %f)", MCptr->p[i].c[0], MCptr->p[i].c[1], MCptr->p[i].c[2]);
868 if (!JS_EvaluateScript(cx, JSVAL_TO_OBJECT(*newval), newline, (
int) strlen(newline), FNAME_STUB, LINENO_STUB, &xf)) {
869 printf (
"error creating the new object in X3D_MF_TO_JS string :%s:\n",newline);
872 if (!JS_DefineElement(cx, JSVAL_TO_OBJECT(*newval), (jsint) i, xf,
873 JS_GET_PROPERTY_STUB, setSF_in_MF, JSPROP_ENUMERATE)) {
874 printf(
"JS_DefineElement failed for arg %u .\n", i);
880 case FIELDTYPE_MFVec2f: {
886 for (i=0; i<MCptr->n; i++) {
887 sprintf (newline,
"new SFVec2f(%f, %f)", MCptr->p[i].c[0], MCptr->p[i].c[1]);
888 if (!JS_EvaluateScript(cx, JSVAL_TO_OBJECT(*newval), newline, (
int) strlen(newline), FNAME_STUB, LINENO_STUB, &xf)) {
889 printf (
"error creating the new object in X3D_MF_TO_JS string :%s:\n",newline);
892 if (!JS_DefineElement(cx, JSVAL_TO_OBJECT(*newval), (jsint) i, xf,
893 JS_GET_PROPERTY_STUB, setSF_in_MF, JSPROP_ENUMERATE)) {
894 printf(
"JS_DefineElement failed for arg %u .\n", i);
899 case FIELDTYPE_MFRotation: {
905 for (i=0; i<MCptr->n; i++) {
906 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]);
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);
919 case FIELDTYPE_MFNode: {
926 for (i=0; i<MCptr->n; i++) {
928 if (MCptr->p[i] != NULL) {
929 sprintf (newline,
"new SFNode(\"%p\")", MCptr->p[i]);
931 if (!JS_EvaluateScript(cx, JSVAL_TO_OBJECT(*newval), newline, (
int) strlen(newline), FNAME_STUB, LINENO_STUB, &xf)) {
932 printf (
"error creating the new object in X3D_MF_TO_JS string :%s:\n",newline);
935 if (!JS_DefineElement(cx, JSVAL_TO_OBJECT(*newval), (jsint) i, xf,
936 JS_GET_PROPERTY_STUB, setSF_in_MF, JSPROP_ENUMERATE)) {
937 printf(
"JS_DefineElement failed for arg %u .\n", i);
947 case FIELDTYPE_MFString: {
953 for (i=0; i<MCptr->n; i++) {
954 #ifdef JSVRMLCLASSESVERBOSE
955 printf (
"X3D_MF_TO_JS, working on %d of %d, p %u\n",i, MCptr->n, MCptr->p[i]);
958 if (((
struct Uni_String *)MCptr->p[i])->strptr != NULL)
959 sprintf (newline,
"new String('%s')", ((
struct Uni_String *)MCptr->p[i])->strptr);
960 else sprintf (newline,
"new String('(NULL)')");
962 #ifdef JSVRMLCLASSESVERBOSE
963 printf (
"X3D_MF_TO_JS, we have a new script to evaluate: \"%s\"\n",newline);
966 if (!JS_EvaluateScript(cx, JSVAL_TO_OBJECT(*newval), newline, (
int) strlen(newline), FNAME_STUB, LINENO_STUB, &xf)) {
967 printf (
"error creating the new object in X3D_MF_TO_JS string :%s:\n",newline);
970 if (!JS_DefineElement(cx, JSVAL_TO_OBJECT(*newval), (jsint) i, xf,
971 JS_GET_PROPERTY_STUB, setSF_in_MF, JSPROP_ENUMERATE)) {
972 printf(
"JS_DefineElement failed for arg %u .\n", i);
978 case FIELDTYPE_SFImage: {
985 sprintf (newline,
"new SFImage(");
987 for (i=0; i<MCptr->n; i++) {
989 sprintf (sl,
"0x%x ", MCptr->p[i]);
992 if (i != ((MCptr->n)-1)) strcat (newline,
",");
993 if (i == 2) strcat (newline,
" new MFInt32(");
996 strcat (newline,
"))");
998 if (!JS_EvaluateScript(cx, JSVAL_TO_OBJECT(*newval), newline, (
int) strlen(newline), FNAME_STUB, LINENO_STUB, &xf)) {
999 printf (
"error creating the new object in X3D_MF_TO_JS string :%s:\n",newline);
1004 default: { printf(
"WARNING: SHOULD NOT BE HERE! %d\n",dataType); }
1007 #ifdef JSVRMLCLASSESVERBOSE
1008 printf (
"returning from X3D_MF_TO_JS\n");
1013void X3D_MF_TO_JS_B(JSContext *cx,
union anyVrml* Data,
int dataType,
int *valueChanged, jsval *newval) {
1020 char *script = NULL;
1022 JSObject *newobj = NULL;
1027 case FIELDTYPE_MFInt32:
1028 newobj = JS_NewObject(cx, &MFInt32Class, NULL, NULL);
break;
1029 case FIELDTYPE_MFBool:
1030 newobj = JS_NewObject(cx, &MFInt32Class, NULL, NULL);
break;
1031 case FIELDTYPE_MFFloat:
1032 newobj = JS_NewObject(cx, &MFFloatClass, NULL, NULL);
break;
1033 case FIELDTYPE_MFTime:
1034 newobj = JS_NewObject(cx, &MFTimeClass, NULL, NULL);
break;
1035 case FIELDTYPE_MFDouble:
1036 newobj = JS_NewObject(cx, &MFDoubleClass, NULL, NULL);
break;
1037 case FIELDTYPE_MFString:
1038 newobj = JS_NewObject(cx,&MFStringClass,NULL,NULL);
break;
1039 case FIELDTYPE_MFImage:
1040 newobj = JS_NewObject(cx,&MFImageClass,NULL,NULL);
break;
1041 case FIELDTYPE_MFColor:
1042 newobj = JS_NewObject(cx, &MFColorClass, NULL, NULL);
break;
1043 case FIELDTYPE_MFColorRGBA:
1044 newobj = JS_NewObject(cx, &MFColorRGBAClass, NULL, NULL);
break;
1045 case FIELDTYPE_MFNode:
1046 newobj = JS_NewObject(cx,&MFNodeClass,NULL,NULL);
break;
1047 case FIELDTYPE_MFVec2f:
1048 newobj = JS_NewObject(cx,&MFVec2fClass,NULL,NULL);
break;
1049 case FIELDTYPE_MFVec3f:
1050 newobj = JS_NewObject(cx, &MFVec3fClass, NULL, NULL);
break;
1051 case FIELDTYPE_MFVec4f:
1052 newobj = JS_NewObject(cx, &MFVec3fClass, NULL, NULL);
break;
1053 case FIELDTYPE_MFVec2d:
1054 newobj = JS_NewObject(cx, &MFVec2fClass, NULL, NULL);
break;
1055 case FIELDTYPE_MFVec3d:
1056 newobj = JS_NewObject(cx, &MFVec3fClass, NULL, NULL);
break;
1057 case FIELDTYPE_MFVec4d:
1058 newobj = JS_NewObject(cx, &MFVec3fClass, NULL, NULL);
break;
1059 case FIELDTYPE_MFMatrix3f:
1060 newobj = JS_NewObject(cx, &MFMatrix3fClass, NULL, NULL);
break;
1061 case FIELDTYPE_MFMatrix4f:
1062 newobj = JS_NewObject(cx, &MFMatrix4fClass, NULL, NULL);
break;
1063 case FIELDTYPE_MFMatrix3d:
1064 newobj = JS_NewObject(cx, &MFMatrix3dClass, NULL, NULL);
break;
1065 case FIELDTYPE_MFMatrix4d:
1066 newobj = JS_NewObject(cx, &MFMatrix4dClass, NULL, NULL);
break;
1067 case FIELDTYPE_MFRotation:
1068 newobj = JS_NewObject(cx,&MFRotationClass,NULL,NULL);
break;
1070 printf (
"invalid type in X3D_MF_TO_JS\n");
return;
1073 if ((ptr = (AnyNative *) AnyNativeNew(dataType,Data,valueChanged)) == NULL) {
1074 printf(
"AnyNativeNew failed in X3D_MF_TO_SF_B.\n");
1078 if (!JS_SetPrivateFw(cx, newobj, ptr)) {
1079 printf(
"JS_SetPrivate failed in X3D_MF_TO_SF_B.\n");
1084 *newval = OBJECT_TO_JSVAL(newobj);
1088 JSObject *obj2 = JSVAL_TO_OBJECT(*newval);
1089 if( (ptr2 = (AnyNative*)JS_GetPrivateFw(cx,obj2)) == NULL){
1090 printf(
"native pointer doesn't survive reduction to jsval\n");
1092 printf(
"OK native pointer survives reduction to jsval");
1093 printf(
"ptr->v->mf.n=%d\n",ptr2->v->mfbool.n);
1104 ppjsUtils p = (ppjsUtils)gglobal()->jsUtils.prv;
1105 p->reportWarnings = JS_TRUE;
1110reportWarningsOff() {
1111 ppjsUtils p = (ppjsUtils)gglobal()->jsUtils.prv;
1112 p->reportWarnings = JS_FALSE;
1117errorReporter(JSContext *context,
const char *message, JSErrorReport *report)
1119 char *errorReport = 0;
1120 int len = 0, charPtrSize = (int)
sizeof(
char *);
1121 ppjsUtils p = (ppjsUtils)gglobal()->jsUtils.prv;
1126 fprintf(stderr,
"%s\n", message);
1131 if (JSREPORT_IS_WARNING(report->flags) && !p->reportWarnings) {
1135 if (report->filename == NULL) {
1136 len = (int) (strlen(message) + 1);
1138 len = (int) ((strlen(report->filename) + 1) + (strlen(message) + 1));
1141 errorReport = (
char *) JS_malloc(context, (len + STRING) * charPtrSize);
1147 if (JSREPORT_IS_WARNING(report->flags)) {
1148 sprintf(errorReport,
1149 "%swarning in %s at line %u:\n\t%s\n",
1150 JSREPORT_IS_STRICT(report->flags) ?
"strict " :
"",
1151 report->filename ? report->filename :
"",
1152 report->lineno ? report->lineno : 0,
1153 message ? message :
"No message.");
1155 sprintf(errorReport,
1156 "error in %s at line %u:\n\t%s\n",
1157 report->filename ? report->filename :
"",
1158 report->lineno ? report->lineno : 0,
1159 message ? message :
"No message.");
1162 fprintf(stderr,
"Javascript -- %s", errorReport);
1164 JS_free(context, errorReport);
1169static int *getFOP (
struct X3D_Node *node,
const char *str) {
1170 int *fieldOffsetsPtr;
1174 #ifdef JSVRMLCLASSESVERBOSE
1175 printf (
"...getFOP... it is a %s\n",stringNodeType(node->_nodeType));
1178 fieldOffsetsPtr = (
int *) NODE_OFFSETS[node->_nodeType];
1184 while (*fieldOffsetsPtr != -1) {
1185 #ifdef JSVRMLCLASSESVERBOSE
1186 printf (
"getFOP, looking at field %s type %s to match %s\n",FIELDNAMES[*fieldOffsetsPtr],FIELDTYPES[*(fieldOffsetsPtr+2)],str);
1191 if (strcmp(str,FIELDNAMES[*fieldOffsetsPtr]) == 0) {
1192 #ifdef JSVRMLCLASSESVERBOSE
1193 printf (
"getFOP, found entry for %s, it is %u (%p)\n",str,fieldOffsetsPtr,fieldOffsetsPtr);
1195 return fieldOffsetsPtr;
1197 fieldOffsetsPtr += FIELDOFFSET_LENGTH;
1202 printf (
"getFOP, could not find field \"%s\" in nodeType \"%s\"\n", str, stringNodeType(node->_nodeType));
1205 printf (
"getFOP, passed in X3D node was NULL!\n");
1212static JSBool getSFNodeField(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
1213 JSObject *obj = *hobj.address();
1214 jsid
id = *hiid.address();
1215 jsval *vp = hvp.address();
1220 int *fieldOffsetsPtr;
1224 _id_c = JS_EncodeString(cx,JSID_TO_STRING(
id));
1226 if ((ptr = (SFNodeNative *)JS_GetPrivateFw(cx, obj)) == NULL) {
1227 printf(
"JS_GetPrivate failed in getSFNodeField.\n");
1231 node = X3D_NODE(ptr->handle);
1234 printf (
"getSFNodeField, can not set field \"%s\", NODE is NULL!\n",_id_c);
1240 fieldOffsetsPtr = getFOP(ptr->handle,
"FIFOsize");
1241 if (fieldOffsetsPtr == NULL) {
1243 printf(
"getSFNodeField : This is not a ringBuffer type\n");
1248 char *_id_buffer_c = NULL ;
1249 RingBuffer * buffer ;
1256 printf(
"getSFNodeField : This could be a ringBuffer type (found FIFOsize)\n");
1259 if (0 == strcmp(_id_c,
"int32Inp")) {
1261 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);
1264 buffer = (RingBuffer *) OSCnode->_int32InpFIFO ;
1266 printf(
"getSFNodeField %d : buffer=%p\n",__LINE__,buffer) ;
1269 if (!RingBuffer_testEmpty(buffer)) {
1270 _id_buffer_c =
"_int32InpFIFO" ;
1271 iVal = RingBuffer_pullUnion(buffer)->i ;
1273 printf(
"getSFNodeField %d : iVal=%d\n",__LINE__,iVal);
1276 *vp = INT_TO_JSVAL(iVal) ;
1280 printf(
"but the buffer is empty\n") ;
1283 }
else if (0 == strcmp(_id_c,
"floatInp")) {
1285 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);
1287 buffer = (RingBuffer *) OSCnode->_floatInpFIFO ;
1289 printf(
"getSFNodeField %d : buffer=%p\n",__LINE__,buffer) ;
1292 if (!RingBuffer_testEmpty(buffer)) {
1293 _id_buffer_c =
"_floatInpFIFO" ;
1294 fVal = RingBuffer_pullUnion(buffer)->f ;
1296 printf(
"getSFNodeField %d : fVal=%d\n",__LINE__,fVal);
1299 JS_NewNumberValue(cx,(
double)fVal,vp);
1303 printf(
"but the buffer is empty\n") ;
1306 }
else if (0 == strcmp(_id_c,
"stringInp")) {
1308 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);
1310 buffer = (RingBuffer *) OSCnode->_stringInpFIFO ;
1312 printf(
"getSFNodeField %d : buffer=%p\n",__LINE__,buffer) ;
1315 if (!RingBuffer_testEmpty(buffer)) {
1316 _id_buffer_c =
"_stringInpFIFO" ;
1317 strPtr = (
char *) RingBuffer_pullUnion(buffer)->p ;
1319 printf(
"getSFNodeField %d : strPtr=%s\n",__LINE__,strPtr);
1322 *vp = STRING_TO_JSVAL(JS_NewStringCopyZ(cx,strPtr));
1326 printf(
"but the buffer is empty\n") ;
1331 printf(
"but this variable itself (%s) is not a ring buffer item\n",_id_c) ;
1338 fieldOffsetsPtr = getFOP(ptr->handle,_id_c);
1339 if (fieldOffsetsPtr == NULL) {
1351 switch (*(fieldOffsetsPtr+2)) {
1352 case FIELDTYPE_SFBool:
1353 case FIELDTYPE_SFFloat:
1354 case FIELDTYPE_SFTime:
1355 case FIELDTYPE_SFDouble:
1356 case FIELDTYPE_SFInt32:
1357 case FIELDTYPE_SFString:
1358 X3D_ECMA_TO_JS(cx, offsetPointer_deref (
void *, node, *(fieldOffsetsPtr+1)),
1359 returnElementLength(*(fieldOffsetsPtr+2)), *(fieldOffsetsPtr+2), vp);
1361 case FIELDTYPE_SFColor:
1362 case FIELDTYPE_SFColorRGBA:
1363 case FIELDTYPE_SFNode:
1364 case FIELDTYPE_SFVec2f:
1365 case FIELDTYPE_SFVec3f:
1366 case FIELDTYPE_SFVec4f:
1367 case FIELDTYPE_SFVec2d:
1368 case FIELDTYPE_SFVec3d:
1369 case FIELDTYPE_SFVec4d:
1370 case FIELDTYPE_SFRotation:
1371 X3D_SF_TO_JS(cx, obj, offsetPointer_deref (
void *, node, *(fieldOffsetsPtr+1)),
1372 returnElementLength(*(fieldOffsetsPtr+2)) * returnElementRowSize(*(fieldOffsetsPtr+2)) , *(fieldOffsetsPtr+2), vp);
1374 case FIELDTYPE_MFInt32:
1375 case FIELDTYPE_MFBool:
1376 case FIELDTYPE_MFFloat:
1377 case FIELDTYPE_MFDouble:
1378 case FIELDTYPE_MFTime:
1379 case FIELDTYPE_MFString:
1380 case FIELDTYPE_MFNode:
1381 case FIELDTYPE_MFColor:
1382 case FIELDTYPE_MFColorRGBA:
1383 case FIELDTYPE_MFVec2f:
1384 case FIELDTYPE_MFVec3f:
1385 case FIELDTYPE_MFVec4f:
1386 case FIELDTYPE_MFVec2d:
1387 case FIELDTYPE_MFVec3d:
1388 case FIELDTYPE_MFVec4d:
1389 case FIELDTYPE_MFRotation:
1390 case FIELDTYPE_MFImage:
1391 case FIELDTYPE_SFImage:
1392 X3D_MF_TO_JS(cx, obj, offsetPointer_deref (
void *, node, *(fieldOffsetsPtr+1)), *(fieldOffsetsPtr+2), vp,
1393 (
char *)FIELDNAMES[*(fieldOffsetsPtr+0)]);
1396 printf (
"unhandled type FIELDTYPE_ %d in getSFNodeField line %d\n", *(fieldOffsetsPtr+2), __LINE__) ;
1400 #ifdef JSVRMLCLASSESVERBOSE
1401 printf (
"end of getSFNodeField\n");
1408JSBool setSFNodeField (JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
1409 JSObject *obj = *hobj.address();
1410 jsid
id = *hiid.address();
1411 jsval *vp = hvp.address();
1415 int *fieldOffsetsPtr;
1420 _id_c = JS_EncodeString(cx,JSID_TO_STRING(
id));
1423 #ifdef JSVRMLCLASSESVERBOSE
1424 printf (
"\nsetSFNodeField called on name %s object %u, jsval %u\n",_id_c, obj, *vp);
1428 if ((ptr = (SFNodeNative *)JS_GetPrivateFw(cx, obj)) == NULL) {
1429 printf(
"JS_GetPrivate failed in setSFNodeField.\n");
1435 node = (
struct X3D_Node *) ptr->handle;
1438 printf (
"setSFNodeField, can not set field \"%s\", NODE is NULL!\n",_id_c);
1445 #ifdef JSVRMLCLASSESVERBOSE
1447 fieldOffsetsPtr = getFOP(ptr->handle,
"FIFOsize");
1449 if (fieldOffsetsPtr == NULL) {
1450 printf(
"setSFNodeField : This is not a ringBuffer type\n");
1452 printf(
"setSFNodeField : This is a ringBuffer type\n");
1459 fieldOffsetsPtr = getFOP(ptr->handle,_id_c);
1463 if (fieldOffsetsPtr == NULL) {
1472 #ifdef JSVRMLCLASSESVERBOSE
1473 printf (
"and a field type of %s\n",FIELDTYPES[*(fieldOffsetsPtr+2)]);
1476 switch (*(fieldOffsetsPtr+2)) {
1477 case FIELDTYPE_SFBool:
1478 case FIELDTYPE_SFFloat:
1479 case FIELDTYPE_SFTime:
1480 case FIELDTYPE_SFDouble:
1481 case FIELDTYPE_SFInt32:
1482 case FIELDTYPE_SFString:
1483 JS_ECMA_TO_X3D(cx, ((
void *)( ((
unsigned char *) node) + *(fieldOffsetsPtr+1))),
1484 returnElementLength(*(fieldOffsetsPtr+2)), *(fieldOffsetsPtr+2), vp);
1486 case FIELDTYPE_SFColor:
1487 case FIELDTYPE_SFNode:
1488 case FIELDTYPE_SFVec2f:
1489 case FIELDTYPE_SFVec3f:
1490 case FIELDTYPE_SFVec3d:
1491 case FIELDTYPE_SFRotation:
1492 JS_SF_TO_X3D(cx, ((
void *)( ((
unsigned char *) node) + *(fieldOffsetsPtr+1))),
1493 returnElementLength(*(fieldOffsetsPtr+2)) * returnElementRowSize(*(fieldOffsetsPtr+2)) , *(fieldOffsetsPtr+2), vp);
1495 case FIELDTYPE_MFColor:
1496 case FIELDTYPE_MFVec3f:
1497 case FIELDTYPE_MFVec2f:
1498 case FIELDTYPE_MFFloat:
1499 case FIELDTYPE_MFTime:
1500 case FIELDTYPE_MFInt32:
1501 case FIELDTYPE_MFString:
1502 case FIELDTYPE_MFNode:
1503 case FIELDTYPE_MFRotation:
1504 case FIELDTYPE_SFImage:
1505 JS_MF_TO_X3D(cx, obj, ((
void *)( ((
unsigned char *) node) + *(fieldOffsetsPtr+1))), *(fieldOffsetsPtr+2), vp);
1507 default: printf (
"unhandled type in setSFNodeField\n");
1514 #ifdef JSVRMLCLASSESVERBOSE
1515 printf (
"end of setSFNodeField\n");
1521#define UNHIDE_DEFINE_SFNODESPECIFIC 1
1522#ifdef UNHIDE_DEFINE_SFNODESPECIFIC
1524int JS_DefineSFNodeSpecificProperties (JSContext *context, JSObject *
object,
struct X3D_Node * ptr) {
1525 int *fieldOffsetsPtr;
1526 jsval rval = INT_TO_JSVAL(0);
1527 uintN attrs = JSPROP_PERMANENT
1529#ifdef JSPROP_EXPORTED
1535 SFNodeNative *nodeNative;
1536 #ifdef JSVRMLCLASSESVERBOSE
1544 #ifdef JSVRMLCLASSESVERBOSE
1545 nodeName = parser_getNameFromNode(ptr) ;
1546 if (nodeName == NULL) {
1547 printf (
"\nStart of JS_DefineSFNodeSpecificProperties for '---' ... working on node %u object %u (%p,%p)\n",ptr,
object,ptr,
object);
1549 printf (
"\nStart of JS_DefineSFNodeSpecificProperties for '%s' ... working on node %u object %u (%p,%p)\n",nodeName,ptr,
object,ptr,
object);
1550 confirmNode = parser_getNodeFromName(nodeName);
1551 if (confirmNode == NULL) {
1552 printf(
"RoundTrip failed : ptr (%p) -> nodeName (%s) -----\n",ptr,nodeName) ;
1554 printf(
"RoundTrip OK : ptr (%p) -> nodeName (%s) -> confirmNode (%p)\n",ptr,nodeName,confirmNode) ;
1560 #ifdef JSVRMLCLASSESVERBOSE
1561 printf (
"...JS_DefineSFNodeSpecificProperties... it is a %s\n",stringNodeType(ptr->_nodeType));
1565 if ((nodeNative = (SFNodeNative *)JS_GetPrivateFw(context,
object)) == NULL) {
1566 printf (
"JS_DefineSFNodeSpecificProperties, can not get private for a SFNode!\n");
1569 if(SM_method() == 0)
1570 if (nodeNative->fieldsExpanded) {
1571 #ifdef JSVRMLCLASSESVERBOSE
1572 printf (
"JS_DefineSFNodeSpecificProperties, already done for node\n");
1578 fieldOffsetsPtr = (
int *) NODE_OFFSETS[ptr->_nodeType];
1584 while (*fieldOffsetsPtr != -1) {
1586 #ifdef JSVRMLCLASSESVERBOSE
1587 printf (
"looking at field %s type %s\n",FIELDNAMES[*fieldOffsetsPtr],FIELDTYPES[*(fieldOffsetsPtr+2)]);
1591 if( 0 == strcmp(
"FreeWRL_PROTOInterfaceNodes",FIELDNAMES[*fieldOffsetsPtr])) {
1593 #ifdef JSVRMLCLASSESVERBOSE
1594 printf (
"%s:%d Mangle %s before calling JS_DefineProperty ....\n",__FILE__,__LINE__,FIELDNAMES[*fieldOffsetsPtr]);
1598 char *saveptr1 = NULL;
1602 for (i=0; i < X3D_GROUP(ptr)->FreeWRL_PROTOInterfaceNodes.n; i++) {
1603 rval = INT_TO_JSVAL(*fieldOffsetsPtr);
1604 name = parser_getNameFromNode(X3D_GROUP(ptr)->FreeWRL_PROTOInterfaceNodes.p[i]);
1606 #ifdef JSVRMLCLASSESVERBOSE
1607 dump_scene(stdout,0,X3D_GROUP(ptr)->FreeWRL_PROTOInterfaceNodes.p[i]);
1608 printf (
"%s:%d dummy name=%s\n",__FILE__,__LINE__,name);
1611 str1 = MALLOC(
void *, 1+strlen(name));
1614 token = strtok_r(str1,
"_", &saveptr1);
1616 token = strtok_r(str1,
"_", &saveptr1);
1619 #ifdef JSVRMLCLASSESVERBOSE
1620 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);
1622 if (!JS_DefineProperty(context,
object, name, rval, getSFNodeField, setSFNodeField, attrs)) {
1623 printf(
"JS_DefineProperty failed for \"%s\" in JS_DefineSFNodeSpecificProperties.\n", name);
1627 }
else if (FIELDNAMES[*fieldOffsetsPtr][0] !=
'_') {
1629 if (FIELDNAMES[*fieldOffsetsPtr][0] !=
'_') {
1632 name = (
char *)FIELDNAMES[*fieldOffsetsPtr];
1633 rval = INT_TO_JSVAL(*fieldOffsetsPtr);
1640 #ifdef JSVRMLCLASSESVERBOSE
1641 printf (
"calling JS_DefineProperty on (context=%p, object=%p, name=%s, rval=%p), setting getSFNodeField, setSFNodeField\n",context,
object,name,rval);
1644 if (!JS_DefineProperty(context,
object, name, rval, getSFNodeField, setSFNodeField, attrs)) {
1645 printf(
"JS_DefineProperty failed for \"%s\" in JS_DefineSFNodeSpecificProperties.\n", name);
1649 fieldOffsetsPtr += FIELDOFFSET_LENGTH;
1653 if(SM_method() == 0)
1654 nodeNative->fieldsExpanded = TRUE;
1656 #ifdef JSVRMLCLASSESVERBOSE
1657 printf (
"JS_DefineSFNodeSpecificProperties, returning TRUE\n");
1688#define SET_TOUCHED_TYPE_MF_A(thisMFtype,thisSFtype) \
1689 else if (JS_InstanceOf (cx, obj, &thisMFtype##Class, NULL)) {\
1691 thisSFtype##Native *ptr; \
1693 if (!JS_GetElement(cx, obj, num, &mainElement)) { \
1694 printf ("JS_GetElement failed for %d in get_valueChanged_flag\n",num); \
1698 if ((ptr = (thisSFtype##Native *)JS_GetPrivateFw(cx, JSVAL_TO_OBJECT(mainElement))) == NULL) {\
1699 printf( "JS_GetPrivate failed in assignCheck.\n"); \
1703 ptr->valueChanged++; \
1711JSBool js_SetPropertyCheck(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
1712 JSObject *obj = *hobj.address();
1713 jsid iid = *hiid.address();
1714 jsval *vp = hvp.address();
1719 if (!JS_IdToValue(cx,iid,&
id)) {
1720 printf(
"js_SetPropertyCheck: JS_IdToValue failed.\n");
1726 if (JS_InstanceOf (cx, obj, &MFStringClass, NULL)) {
1727 SET_MF_ECMA_HAS_CHANGED;
1730 else if (JS_InstanceOf (cx, obj, &MFFloatClass, NULL)) {
1731 SET_MF_ECMA_HAS_CHANGED;
1734 else if (JS_InstanceOf (cx, obj, &MFInt32Class, NULL)) {
1735 SET_MF_ECMA_HAS_CHANGED;
1740 else if (JS_InstanceOf (cx, obj, &MFBoolClass, NULL)) {
1741 SET_MF_ECMA_HAS_CHANGED;
1747 SET_TOUCHED_TYPE_MF_A(MFNode,SFNode)
1748 SET_TOUCHED_TYPE_MF_A(MFVec2f,
SFVec2f)
1749 SET_TOUCHED_TYPE_MF_A(MFVec3f,
SFVec3f)
1751 SET_TOUCHED_TYPE_MF_A(MFColor,
SFColor)
1755 #ifdef JSVRMLCLASSESVERBOSE
1756 printf (
"this is a class of "); printJSNodeType (cx,obj);
1765JSBool js_GetPropertyDebug (JSContext *context, JSObject *obj, jsid iid, jsval *vp) {
1767 #ifdef JSVRMLCLASSESVERBOSE
1768 char *_id_c =
"(no value in string)";
1771#if JS_VERSION >= 185
1773 if (!JS_IdToValue(context,iid,&
id)) {
1774 printf(
"js_GetPropertyDebug: JS_IdToValue failed -- NOT returning false\n");
1778 if (JSVAL_IS_STRING(
id)) {
1780 _id_c = JS_GetStringBytes(JSVAL_TO_STRING(
id));
1782 _id_c = JS_EncodeString(context,JSVAL_TO_STRING(
id));
1784 printf (
"\n...js_GetPropertyDebug called on string \"%s\" object %u, jsval %lu\n",_id_c, (
unsigned int) obj, *vp);
1785#if JS_VERSION >= 185
1786 JS_free(context,_id_c);
1788 }
else if (JSVAL_IS_INT(
id)) {
1789 num = JSVAL_TO_INT(
id);
1790 printf (
"\n...js_GetPropertyDebug called on number %d object %u, jsval %lu\n",num, (
unsigned int) obj, *vp);
1792 printf (
"\n...js_GetPropertyDebug called on unknown type of object %u, jsval %lu\n", (
unsigned int) obj, *vp);
1798#ifdef JSVRMLCLASSESVERBOSE
1800void js_SetPropertyDebugWrapped (JSContext *context, JSObject *obj, jsval
id, jsval *vp,
char *debugString) {
1802void js_SetPropertyDebugWrapped (JSContext *context, JSObject *obj, jsid iid, jsval *vp,
char *debugString) {
1804 char *_id_c =
"(no value in string)";
1806#if JS_VERSION >= 185
1808 if (!JS_IdToValue(context,iid,&
id)) {
1809 printf(
"js_GetPropertyDebug: JS_IdToValue failed\n");
1814 if (JSVAL_IS_STRING(
id)) {
1816 _id_c = JS_GetStringBytes(JSVAL_TO_STRING(
id));
1818 _id_c = JS_EncodeString(context,JSVAL_TO_STRING(
id));
1820 printf (
"\n...js_SetPropertyDebug%s called on string \"%s\" object %p, jsval %lu\n",debugString,_id_c, obj, *vp);
1821#if JS_VERSION >= 185
1822 JS_free(context,_id_c);
1824 }
else if (JSVAL_IS_INT(
id)) {
1825 num = JSVAL_TO_INT(
id);
1826 printf (
"\n...js_SetPropertyDebug%s called on number %d object %p, jsval %lu\n",debugString,num, obj, *vp);
1828 printf (
"\n...js_SetPropertyDebug%s called on unknown type of object %p, jsval %lu\n",debugString, obj, *vp);
1833JSBool js_SetPropertyDebug (JSContext *context, JSObject *obj, jsid
id, JSBool strict, jsval *vp) {
1835 #ifdef JSVRMLCLASSESVERBOSE
1836 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"");
1841JSBool js_SetPropertyDebug1 (JSContext *context, JSObject *obj, jsid
id, JSBool strict, jsval *vp) {
1843 #ifdef JSVRMLCLASSESVERBOSE
1844 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"1");
1848JSBool js_SetPropertyDebug2 (JSContext *context, JSObject *obj, jsid
id, JSBool strict, jsval *vp) {
1850 #ifdef JSVRMLCLASSESVERBOSE
1851 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"2");
1857JSBool js_SetPropertyDebug3 (JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
1858 JSObject *obj = *hobj.address();
1859 jsid
id = *hiid.address();
1860 jsval *vp = hvp.address();
1862 #ifdef JSVRMLCLASSESVERBOSE
1863 js_SetPropertyDebugWrapped(cx,obj,
id,vp,
"3");
1867JSBool js_SetPropertyDebug4 (JSContext *context, JSObject *obj, jsid
id, JSBool strict, jsval *vp) {
1869 #ifdef JSVRMLCLASSESVERBOSE
1870 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"4");
1875JSBool js_SetPropertyDebug5(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
1876 JSObject *obj = *hobj.address();
1877 jsid
id = *hiid.address();
1878 jsval *vp = hvp.address();
1880 #ifdef JSVRMLCLASSESVERBOSE
1881 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"5");
1886JSBool js_SetPropertyDebug6 (JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
1887 JSObject *obj = *hobj.address();
1888 jsid
id = *hiid.address();
1889 jsval *vp = hvp.address();
1890 #ifdef JSVRMLCLASSESVERBOSE
1891 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"6");
1895JSBool js_SetPropertyDebug7 (JSContext *context, JSObject *obj, jsid
id, JSBool strict, jsval *vp) {
1897 #ifdef JSVRMLCLASSESVERBOSE
1898 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"7");
1902JSBool js_SetPropertyDebug8 (JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
1903 JSObject *obj = *hobj.address();
1904 jsid
id = *hiid.address();
1905 jsval *vp = hvp.address();
1907 #ifdef JSVRMLCLASSESVERBOSE
1908 js_SetPropertyDebugWrapped(cx,obj,
id,vp,
"8");
1912JSBool js_SetPropertyDebug9 (JSContext *context, JSObject *obj, jsid
id, JSBool strict, jsval *vp) {
1914 #ifdef JSVRMLCLASSESVERBOSE
1915 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"9");