41#define STRING_SIZE 256
45#define jsuint uint32_t
47#define jsdouble double
49#define JS_FinalizeStub NULL
84#include "jsUtils_sm.h"
85#include "jsVRMLClasses_sm.h"
88 #include "../scenegraph/ringbuf.h"
90 #define TRACK_FIFO_MSG 0
93 #define TRACK_FIFO_MSG 0
96extern void dump_scene (FILE *fp,
int level,
struct X3D_Node* node);
97extern char *parser_getNameFromNode(
struct X3D_Node *ptr) ;
111typedef struct pjsUtils{
113 JSBool reportWarnings;
116void *jsUtils_constructor(){
117 void *v = MALLOCV(
sizeof(
struct pjsUtils));
118 memset(v,0,
sizeof(
struct pjsUtils));
121void jsUtils_init(
struct iiglobal::tjsUtils *t){
124 t->prv = jsUtils_constructor();
126 ppjsUtils p = (ppjsUtils)t->prv;
127 p->insetSFStr = FALSE;
128 p->reportWarnings = JS_TRUE;
134int JS_SetPrivateFw(JSContext *cx, JSObject* obj,
void *data){
136 JS_SetPrivate(obj, data);
139JSObject* JS_NewGlobalObjectFw(JSContext *cx, JSClass *clasp){
140 return JS_NewGlobalObject(cx, clasp, NULL);
142void * JS_GetPrivateFw(JSContext *cx,JSObject* obj){
143 return JS_GetPrivate(obj);
145JSObject* JS_GetParentFw(JSContext *cx, JSObject *obj){
146 return JS_GetParent(obj);
151JSBool JS_NewNumberValue(JSContext *cx, jsdouble d, jsval *rval){
152 *rval = JS_NumberValue(d);
159JS_ConstructObjectWithArgumentsFw(JSContext *cx, JSClass *clasp,
160 JSObject *parent,
unsigned argc, jsval *argv)
162 JSObject *global = JS_GetGlobalForScopeChain(cx);
164 if (!global || !JS_GetProperty(cx, global, clasp->name, &v))
166 if (JSVAL_IS_PRIMITIVE(v)) {
167 JS_ReportError(cx,
"cannot construct object: constructor is gone");
170 return JS_New(cx, JSVAL_TO_OBJECT(v), argc, argv);
174JS_ConstructObjectFw(JSContext *cx, JSClass *clasp,
void *whatever, JSObject *parent)
176 return JS_ConstructObjectWithArgumentsFw(cx, clasp, parent, 0, NULL);
178JSClass* JS_GetClassFw(JSContext *cx, JSObject *obj){
179 return JS_GetClass(obj);
181JSObject * JS_GetPrototypeFw(JSContext *cx, JSObject * obj){
183 if( JS_GetPrototype(cx,obj,&proto))
191static JSBool setSF_in_MF (JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
192 JSObject *obj = *hobj.address();
193 jsid iid = *hiid.address();
194 jsval *vp = hvp.address();
202 ppjsUtils p = (ppjsUtils)gglobal()->jsUtils.prv;
210 if (!JS_IdToValue(cx,iid,&
id)) {
211 printf(
"setSF_in_MF: JS_IdToValue failed.\n");
219 #ifdef JSVRMLCLASSESVERBOSE
220 printf (
"setSF_in_MF: already caught this value; this is our JS_SetElement call\n");
226 p->insetSFStr = TRUE;
228 if (JSVAL_IS_INT(
id)) {
235 if (!JS_GetElement(cx, obj, num, &ele)) {
236 printf (
"error getting child %ld in setSF_in_MF\n",num);
241 if (!JS_SetElement(cx,obj,num,vp)) {
242 printf (
"can not set element %ld in MFString\n",num);
246 printf (
"expect an integer id in setSF_in_MF\n");
253 par = JS_GetParentFw(cx, me);
254 while (par != NULL) {
255 #ifdef JSVRMLCLASSESVERBOSE
256 printf (
"for obj %u: ",me);
257 printJSNodeType(cx,me);
258 printf (
"... parent %u\n",par);
259 printJSNodeType(cx,par);
262 if (JS_InstanceOf (cx, par, &SFNodeClass, NULL)) {
263 #ifdef JSVRMLCLASSESVERBOSE
264 printf (
" the parent IS AN SFNODE - it is %u\n",par);
268 if (!JS_GetProperty(cx, obj,
"_parentField", &pf)) {
269 printf (
"doMFSetProperty, can not get parent field from this object\n");
273 nf = OBJECT_TO_JSVAL(me);
275 if (!JS_ValueToId(cx,pf,&oid)) {
276 printf(
"setSF_in_MF: JS_ValueToId failed.\n");
295 par = JS_GetParentFw(cx, me);
297 p->insetSFStr = FALSE;
303void JS_ECMA_TO_X3D(JSContext *cx,
void *Data,
unsigned datalen,
int dataType, jsval *newval) {
308 #ifdef JSVRMLCLASSESVERBOSE
309 printf (
"calling JS_ECMA_TO_X3D on type %s\n",FIELDTYPES[dataType]);
314 case FIELDTYPE_SFFloat: {
315 if (!JS_ValueToNumber(cx,*newval,&dl)) {
316 printf (
"problems converting Javascript val to number\n");
320 memcpy (Data, (
void *) &fl, datalen);
323 case FIELDTYPE_SFDouble:
324 case FIELDTYPE_SFTime: {
325 if (!JS_ValueToNumber(cx,*newval,&dl)) {
326 printf (
"problems converting Javascript val to number\n");
329 memcpy (Data, (
void *) &dl, datalen);
332 case FIELDTYPE_SFBool: {
333 il = JSVAL_TO_BOOLEAN (*newval);
334 memcpy (Data, (
void *) &il, datalen);
338 case FIELDTYPE_SFInt32: {
339 il = JSVAL_TO_INT (*newval);
340 memcpy (Data, (
void *) &il, datalen);
344 case FIELDTYPE_SFString: {
349 _idStr = JS_ValueToString(cx, *newval);
350 _id_c = JS_EncodeString(cx,_idStr);
352 oldS = (
struct Uni_String *) *((intptr_t *)Data);
354 *(
struct Uni_String **)Data = newASCIIString(_id_c);
356 #ifdef JSVRMLCLASSESVERBOSE
357 printf (
"JS_ECMA_TO_X3D, replacing \"%s\" with \"%s\" \n", oldS->strptr, _id_c);
361 verify_Uni_String (oldS,_id_c);
366 default: { printf(
"WARNING: SHOULD NOT BE HERE in JS_ECMA_TO_X3D! %d\n",dataType); }
372void JS_SF_TO_X3D(JSContext *cx,
void *Data,
unsigned datalen,
int dataType, jsval *newval) {
382 #ifdef JSVRMLCLASSESVERBOSE
383 printf (
"calling JS_SF_TO_X3D on type %s\n",FIELDTYPES[dataType]);
387 if ((VPtr = JS_GetPrivateFw(cx, JSVAL_TO_OBJECT(*newval))) == NULL) {
388 printf(
"JS_GetPrivate failed in JS_SF_TO_X3D.\n");
394 case FIELDTYPE_SFColor:
396 memcpy (Data, (
void *)((Cptr->v).c), datalen);
398 case FIELDTYPE_SFVec3d:
400 memcpy (Data, (
void *)((V3dptr->v).c), datalen);
402 case FIELDTYPE_SFVec3f:
404 memcpy (Data, (
void *)((V3ptr->v).c), datalen);
406 case FIELDTYPE_SFVec2f:
408 memcpy (Data, (
void *)((V2ptr->v).c), datalen);
410 case FIELDTYPE_SFRotation:
412 memcpy (Data,(
void *)((VRptr->v).c), datalen);
414 case FIELDTYPE_SFNode:
416 memcpy (Data, (
void *)(VNptr->handle), datalen);
419 default: { printf(
"WARNING: SHOULD NOT BE HERE! %d\n",dataType); }
423void JS_SF_TO_X3D_B(JSContext *cx,
void *Data,
int dataType,
int *valueChanged, jsval *newval) {
428 if ((ptr = (
AnyNative*)JS_GetPrivateFw(cx, JSVAL_TO_OBJECT(*newval))) == NULL) {
429 printf(
"JS_GetPrivate failed in JS_SF_TO_X3D_B.\n");
432 if(ptr->type != dataType){
433 printf(
"JS assigning type %d to %d failed\n",ptr->type,dataType);
436 shallow_copy_field(dataType,ptr->v,(
union anyVrml*)Data);
438void JS_SF_TO_X3D_BNode(JSContext *cx,
void *Data,
int dataType,
int *valueChanged, jsval *newval) {
441 if(JSVAL_IS_NULL(*newval)){
444 shallow_copy_field(dataType,&any,(
union anyVrml*)Data);
446 JS_SF_TO_X3D_B(cx, Data, dataType, valueChanged, newval);
452void getJSMultiNumType(JSContext *,
struct Multi_Vec3f *,
int);
455void JS_MF_TO_X3D(JSContext *cx, JSObject * obj,
void *Data,
int dataType, jsval *newval) {
457 #ifdef JSVRMLCLASSESVERBOSE
458 printf (
"calling JS_MF_TO_X3D on type %s\n",FIELDTYPES[dataType]);
459 printf (
"JS_MF_TO_X3D, we have object %u, newval %u\n",obj,*newval);
460 printf (
"JS_MF_TO_X3D, obj is an:\n");
461 if (JSVAL_IS_OBJECT(OBJECT_TO_JSVAL(obj))) { printf (
"JS_MF_TO_X3D - obj is an OBJECT\n"); }
462 if (JSVAL_IS_PRIMITIVE(OBJECT_TO_JSVAL(obj))) { printf (
"JS_MF_TO_X3D - obj is an PRIMITIVE\n"); }
463 printf (
"JS_MF_TO_X3D, obj is a "); printJSNodeType(cx,obj);
464 printf (
"JS_MF_TO_X3D, vp is an:\n");
465 if (JSVAL_IS_OBJECT(*newval)) { printf (
"JS_MF_TO_X3D - vp is an OBJECT\n"); }
466 if (JSVAL_IS_PRIMITIVE(*newval)) { printf (
"JS_MF_TO_X3D - vp is an PRIMITIVE\n"); }
467 printf (
"JS_MF_TO_X3D, vp is a "); printJSNodeType(cx,JSVAL_TO_OBJECT(*newval));
470 *(jsval *)tg->JScript.JSglobal_return_val = *newval;
471 getJSMultiNumType (cx, (
struct Multi_Vec3f*) Data, convertToSFType(dataType));
479void X3D_ECMA_TO_JS(JSContext *cx,
void *Data,
int datalen,
int dataType, jsval *newval) {
486 #ifdef JSVRMLCLASSESVERBOSE
487 printf (
"calling X3D_ECMA_TO_JS on type %s\n",FIELDTYPES[dataType]);
492 case FIELDTYPE_SFFloat: {
493 memcpy ((
void *) &fl, Data, datalen);
494 JS_NewNumberValue(cx,(
double)fl,newval);
497 case FIELDTYPE_SFDouble:
498 case FIELDTYPE_SFTime: {
499 memcpy ((
void *) &dl, Data, datalen);
500 JS_NewNumberValue(cx,dl,newval);
503 case FIELDTYPE_SFBool:
504 case FIELDTYPE_SFInt32: {
505 memcpy ((
void *) &il,Data, datalen);
506 *newval = INT_TO_JSVAL(il);
510 case FIELDTYPE_SFString: {
516 memcpy((
void *) &ms,Data,
sizeof(
void *));
517 *newval = STRING_TO_JSVAL(JS_NewStringCopyZ(cx,ms->strptr));
520 default: { printf(
"WARNING: SHOULD NOT BE HERE in X3D_ECMA_TO_JS! %d\n",dataType); }
526void X3D_SF_TO_JS(JSContext *cx, JSObject *obj,
void *Data,
unsigned datalen,
int dataType, jsval *newval) {
536 const char *script = NULL;
540 #ifdef JSVRMLCLASSESVERBOSE
541 printf (
"calling X3D_SF_TO_JS on type %s, newval %u\n",FIELDTYPES[dataType],*newval);
545 if(!(*newval).isObject()) {
548 case FIELDTYPE_SFVec3f: script =
"new SFVec3f()";
break;
549 case FIELDTYPE_SFVec3d: script =
"new SFVec3d()";
break;
550 case FIELDTYPE_SFColor: script =
"new SFColor()";
break;
551 case FIELDTYPE_SFNode: script =
"new SFNode()";
break;
552 case FIELDTYPE_SFVec2f: script =
"new SFVec2f()";
break;
553 case FIELDTYPE_SFRotation: script =
"new SFRotation()";
break;
554 default: printf (
"invalid type in X3D_SF_TO_JS\n");
return;
560 #ifdef JSVRMLCLASSESVERBOSE
561 printf (
"X3D_SF_TO_JS, have to run script to make new object: \"%s\"\n",script);
564 if (!JS_EvaluateScript(cx, obj, script, (
int) strlen(script), FNAME_STUB, LINENO_STUB, &rval)) {
565 printf (
"error creating the new object in X3D_SF_TO_JS, script :%s:\n",script);
572 #ifdef JSVRMLCLASSESVERBOSE
573 printf (
"X3D_SF_TO_JS, so, newval now is %u\n",*newval);
578 if ((VPtr = JS_GetPrivateFw(cx, JSVAL_TO_OBJECT(*newval))) == NULL) {
579 printf(
"JS_GetPrivate failed in X3D_SF_TO_JS.\n");
586 case FIELDTYPE_SFColor:
588 memcpy ((
void *)((Cptr->v).c), Data, datalen);
589 Cptr->valueChanged = 1;
591 case FIELDTYPE_SFVec3f:
593 memcpy ((
void *)((V3ptr->v).c), Data, datalen);
594 V3ptr->valueChanged = 1;
596 case FIELDTYPE_SFVec3d:
598 memcpy ((
void *)((V3dptr->v).c), Data, datalen);
599 V3dptr->valueChanged = 1;
601 case FIELDTYPE_SFVec2f:
603 memcpy ((
void *)((V2ptr->v).c), Data, datalen);
604 V2ptr->valueChanged = 1;
606 case FIELDTYPE_SFRotation:
608 memcpy ((
void *)((VRptr->v).c), Data, datalen);
609 VRptr->valueChanged = 1;
611 case FIELDTYPE_SFNode:
613 memcpy ((
void *)(&(VNptr->handle)), Data, datalen);
614 VNptr->valueChanged = 1;
617 default: { printf(
"WARNING: SHOULD NOT BE HERE! %d\n",dataType); }
621void X3D_SF_TO_JS_B(JSContext *cx,
void *Data,
unsigned datalen,
int dataType,
int *valueChanged, jsval *newval)
629 #ifdef JSVRMLCLASSESVERBOSE
630 printf (
"calling X3D_SF_TO_JS on type %s, newval %u\n",FIELDTYPES[dataType],*newval);
638 case FIELDTYPE_SFVec3f:
639 newobj = JS_NewObject(cx,&SFVec3fClass,NULL,NULL);
break;
640 case FIELDTYPE_SFVec3d:
641 newobj = JS_NewObject(cx,&SFVec3dClass,NULL,NULL);
break;
642 case FIELDTYPE_SFColor:
643 newobj = JS_NewObject(cx,&SFColorClass,NULL,NULL);
break;
644 case FIELDTYPE_SFNode:
645 newobj = JS_NewObject(cx,&SFNodeClass,NULL,NULL);
break;
646 case FIELDTYPE_SFVec2f:
647 newobj = JS_NewObject(cx,&SFVec2fClass,NULL,NULL);
break;
648 case FIELDTYPE_SFRotation:
649 newobj = JS_NewObject(cx,&SFRotationClass,NULL,NULL);
break;
650 default: printf (
"invalid type in X3D_SF_TO_JS\n");
return;
655 if ((ptr = (
AnyNative *) AnyNativeNew(dataType,(
union anyVrml*)Data,valueChanged)) == NULL) {
656 printf(
"AnyNativeNew failed in X3D_MF_TO_SF_B.\n");
660 if (!JS_SetPrivateFw(cx, newobj, ptr)) {
661 printf(
"JS_SetPrivate failed in X3D_MF_TO_SF_B.\n");
666 *newval = OBJECT_TO_JSVAL(newobj);
667 #ifdef JSVRMLCLASSESVERBOSE
668 printf (
"X3D_SF_TO_JS_B, so, newval now is %u\n",*newval);
673void X3D_SF_TO_JS_BNode(JSContext *cx,
void *Data,
unsigned datalen,
int dataType,
int *valueChanged, jsval *newval)
676 if(any->sfnode == NULL){
677 *newval = JSVAL_NULL;
679 X3D_SF_TO_JS_B(cx, Data, datalen, dataType, valueChanged, newval);
684void X3D_MF_TO_JS(JSContext *cx, JSObject *obj,
void *Data,
int dataType, jsval *newval,
char *fieldName) {
687 const char *script = NULL;
691 jsval fieldNameAsJSVAL;
697 #ifdef JSVRMLCLASSESVERBOSE
698 printf (
"calling X3D_MF_TO_JS on type %s\n",FIELDTYPES[dataType]);
699 printf (
"X3D_MF_TO_JS, we have object %u, newval %u\n",obj,*newval);
700 printf (
"X3D_MF_TO_JS, obj is an:\n");
701 if (JSVAL_IS_OBJECT(OBJECT_TO_JSVAL(obj))) { printf (
"X3D_MF_TO_JS - obj is an OBJECT\n");
702 printf (
"X3D_MF_TO_JS, obj is a "); printJSNodeType(cx,obj);
704 if (JSVAL_IS_PRIMITIVE(OBJECT_TO_JSVAL(obj))) { printf (
"X3D_MF_TO_JS - obj is an PRIMITIVE\n"); }
705 printf (
"X3D_MF_TO_JS, vp is an:\n");
706 if (JSVAL_IS_OBJECT(*newval)) { printf (
"X3D_MF_TO_JS - newval is an OBJECT\n");
707 printf (
"X3D_MF_TO_JS, newval is a "); printJSNodeType(cx,JSVAL_TO_OBJECT(*newval));
709 if (JSVAL_IS_PRIMITIVE(*newval)) { printf (
"X3D_MF_TO_JS - newval is an PRIMITIVE\n"); }
713#ifdef JSVRMLCLASSESVERBOSE
714 printf (
"X3D_MF_TO_JS - is this already expanded? \n");
719 if ((VNptr = JS_GetPrivate(cx, obj)) == NULL) {
720 printf(
"JS_GetPrivate failed in X3D_MF_TO_JS.\n");
723 if (VNptr->fieldsExpanded) printf (
"FIELDS EXPANDED\n");
724 else printf (
"FIELDS NOT EXPANDED\n");
730 if (!(*newval).isObject()) {
731 #ifdef JSVRMLCLASSESVERBOSE
732 printf (
"X3D_MF_TO_JS - have to create empty MF type \n");
737 case FIELDTYPE_MFString: script =
"new MFString()";
break;
738 case FIELDTYPE_MFFloat: script =
"new MFFloat()";
break;
739 case FIELDTYPE_MFTime: script =
"new MFTime()";
break;
740 case FIELDTYPE_MFInt32: script =
"new MFInt32()";
break;
741 case FIELDTYPE_SFImage: script =
"new SFImage()";
break;
742 case FIELDTYPE_MFVec3f: script =
"new MFVec3f()";
break;
743 case FIELDTYPE_MFColor: script =
"new MFColor()";
break;
744 case FIELDTYPE_MFNode: script =
"new MFNode()";
break;
745 case FIELDTYPE_MFVec2f: script =
"new MFVec2f()";
break;
746 case FIELDTYPE_MFRotation: script =
"new MFRotation()";
break;
747 default: printf (
"invalid type in X3D_MF_TO_JS\n");
return;
750 if (!JS_EvaluateScript(cx, obj, script, (
int) strlen(script), FNAME_STUB, LINENO_STUB, &rval)) {
751 printf (
"error creating the new object in X3D_MF_TO_JS\n");
759 #ifdef JSVRMLCLASSESVERBOSE
760 printf (
"setting parent for %u to %u\n", *newval, obj);
768 if (!JS_SetParent (cx, JSVAL_TO_OBJECT(*newval), obj)) {
769 printf (
"X3D_MF_TO_JS - can not set parent!\n");
772 #ifdef JSVRMLCLASSESVERBOSE
773 printf (
"telling %u that it is a child \"%s\" of parent %u\n",*newval, fieldName, obj);
776 fieldNameAsJSVAL = STRING_TO_JSVAL(JS_NewStringCopyZ(cx,fieldName));
778 if (!JS_DefineProperty(cx, JSVAL_TO_OBJECT(*newval),
"_parentField", fieldNameAsJSVAL,
779 JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_STUB5, JSPROP_READONLY)) {
780 printf(
"JS_DefineProperty failed for \"%s\" in X3D_MF_TO_JS.\n", fieldName);
785 #ifdef JSVRMLCLASSESVERBOSE
786 printf (
"X3D_MF_TO_JS - object is %u, copying over data\n",*newval);
792 case FIELDTYPE_MFInt32:
794 for (i=0; i<MIptr->n; i++) {
795 if (!JS_DefineElement(cx, JSVAL_TO_OBJECT(*newval), (jsint) i, INT_TO_JSVAL(MIptr->p[i]),
796 JS_GET_PROPERTY_STUB, setSF_in_MF, JSPROP_ENUMERATE)) {
797 printf(
"JS_DefineElement failed for arg %u in MFInt32Constr.\n", i);
802 case FIELDTYPE_MFFloat:
804 for (i=0; i<MFptr->n; i++) {
805 if (!JS_DefineElement(cx, JSVAL_TO_OBJECT(*newval), (jsint) i, INT_TO_JSVAL(MFptr->p[i]),
806 JS_GET_PROPERTY_STUB, setSF_in_MF, JSPROP_ENUMERATE)) {
807 printf(
"JS_DefineElement failed for arg %u in MFFloatConstr.\n", i);
812 case FIELDTYPE_MFTime:
814 for (i=0; i<MTptr->n; i++) {
815 if (!JS_DefineElement(cx, JSVAL_TO_OBJECT(*newval), (jsint) i, INT_TO_JSVAL(MTptr->p[i]),
816 JS_GET_PROPERTY_STUB, setSF_in_MF, JSPROP_ENUMERATE)) {
817 printf(
"JS_DefineElement failed for arg %u in MFTimeConstr.\n", i);
822 case FIELDTYPE_MFColor:
823 case FIELDTYPE_MFVec3f: {
829 for (i=0; i<MCptr->n; i++) {
830 if (dataType == FIELDTYPE_MFColor)
831 sprintf (newline,
"new SFColor(%f, %f, %f)", MCptr->p[i].c[0], MCptr->p[i].c[1], MCptr->p[i].c[2]);
833 sprintf (newline,
"new SFColor(%f, %f, %f)", MCptr->p[i].c[0], MCptr->p[i].c[1], MCptr->p[i].c[2]);
834 if (!JS_EvaluateScript(cx, JSVAL_TO_OBJECT(*newval), newline, (
int) strlen(newline), FNAME_STUB, LINENO_STUB, &xf)) {
835 printf (
"error creating the new object in X3D_MF_TO_JS string :%s:\n",newline);
838 if (!JS_DefineElement(cx, JSVAL_TO_OBJECT(*newval), (jsint) i, xf,
839 JS_GET_PROPERTY_STUB, setSF_in_MF, JSPROP_ENUMERATE)) {
840 printf(
"JS_DefineElement failed for arg %u .\n", i);
846 case FIELDTYPE_MFVec2f: {
852 for (i=0; i<MCptr->n; i++) {
853 sprintf (newline,
"new SFVec2f(%f, %f)", MCptr->p[i].c[0], MCptr->p[i].c[1]);
854 if (!JS_EvaluateScript(cx, JSVAL_TO_OBJECT(*newval), newline, (
int) strlen(newline), FNAME_STUB, LINENO_STUB, &xf)) {
855 printf (
"error creating the new object in X3D_MF_TO_JS string :%s:\n",newline);
858 if (!JS_DefineElement(cx, JSVAL_TO_OBJECT(*newval), (jsint) i, xf,
859 JS_GET_PROPERTY_STUB, setSF_in_MF, JSPROP_ENUMERATE)) {
860 printf(
"JS_DefineElement failed for arg %u .\n", i);
865 case FIELDTYPE_MFRotation: {
871 for (i=0; i<MCptr->n; i++) {
872 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]);
873 if (!JS_EvaluateScript(cx, JSVAL_TO_OBJECT(*newval), newline, (
int) strlen(newline), FNAME_STUB, LINENO_STUB, &xf)) {
874 printf (
"error creating the new object in X3D_MF_TO_JS string :%s:\n",newline);
877 if (!JS_DefineElement(cx, JSVAL_TO_OBJECT(*newval), (jsint) i, xf,
878 JS_GET_PROPERTY_STUB, setSF_in_MF, JSPROP_ENUMERATE)) {
879 printf(
"JS_DefineElement failed for arg %u .\n", i);
885 case FIELDTYPE_MFNode: {
892 for (i=0; i<MCptr->n; i++) {
894 if (MCptr->p[i] != NULL) {
895 sprintf (newline,
"new SFNode(\"%p\")", MCptr->p[i]);
897 if (!JS_EvaluateScript(cx, JSVAL_TO_OBJECT(*newval), newline, (
int) strlen(newline), FNAME_STUB, LINENO_STUB, &xf)) {
898 printf (
"error creating the new object in X3D_MF_TO_JS string :%s:\n",newline);
901 if (!JS_DefineElement(cx, JSVAL_TO_OBJECT(*newval), (jsint) i, xf,
902 JS_GET_PROPERTY_STUB, setSF_in_MF, JSPROP_ENUMERATE)) {
903 printf(
"JS_DefineElement failed for arg %u .\n", i);
913 case FIELDTYPE_MFString: {
919 for (i=0; i<MCptr->n; i++) {
920 #ifdef JSVRMLCLASSESVERBOSE
921 printf (
"X3D_MF_TO_JS, working on %d of %d, p %u\n",i, MCptr->n, MCptr->p[i]);
924 if (((
struct Uni_String *)MCptr->p[i])->strptr != NULL)
925 sprintf (newline,
"new String('%s')", ((
struct Uni_String *)MCptr->p[i])->strptr);
926 else sprintf (newline,
"new String('(NULL)')");
928 #ifdef JSVRMLCLASSESVERBOSE
929 printf (
"X3D_MF_TO_JS, we have a new script to evaluate: \"%s\"\n",newline);
932 if (!JS_EvaluateScript(cx, JSVAL_TO_OBJECT(*newval), newline, (
int) strlen(newline), FNAME_STUB, LINENO_STUB, &xf)) {
933 printf (
"error creating the new object in X3D_MF_TO_JS string :%s:\n",newline);
936 if (!JS_DefineElement(cx, JSVAL_TO_OBJECT(*newval), (jsint) i, xf,
937 JS_GET_PROPERTY_STUB, setSF_in_MF, JSPROP_ENUMERATE)) {
938 printf(
"JS_DefineElement failed for arg %u .\n", i);
944 case FIELDTYPE_SFImage: {
951 sprintf (newline,
"new SFImage(");
953 for (i=0; i<MCptr->n; i++) {
955 sprintf (sl,
"0x%x ", MCptr->p[i]);
958 if (i != ((MCptr->n)-1)) strcat (newline,
",");
959 if (i == 2) strcat (newline,
" new MFInt32(");
962 strcat (newline,
"))");
964 if (!JS_EvaluateScript(cx, JSVAL_TO_OBJECT(*newval), newline, (
int) strlen(newline), FNAME_STUB, LINENO_STUB, &xf)) {
965 printf (
"error creating the new object in X3D_MF_TO_JS string :%s:\n",newline);
970 default: { printf(
"WARNING: SHOULD NOT BE HERE! %d\n",dataType); }
973 #ifdef JSVRMLCLASSESVERBOSE
974 printf (
"returning from X3D_MF_TO_JS\n");
979void X3D_MF_TO_JS_B(JSContext *cx,
union anyVrml* Data,
int dataType,
int *valueChanged, jsval *newval) {
988 JSObject *newobj = NULL;
993 case FIELDTYPE_MFString:
994 newobj = JS_NewObject(cx,&MFStringClass,NULL,NULL);
break;
995 case FIELDTYPE_MFFloat:
996 newobj = JS_NewObject(cx,&MFFloatClass,NULL,NULL);
break;
997 case FIELDTYPE_MFTime:
998 newobj = JS_NewObject(cx,&MFTimeClass,NULL,NULL);
break;
999 case FIELDTYPE_MFInt32:
1000 newobj = JS_NewObject(cx,&MFInt32Class,NULL,NULL);
break;
1001 case FIELDTYPE_SFImage:
1002 newobj = JS_NewObject(cx,&SFImageClass,NULL,NULL);
break;
1003 case FIELDTYPE_MFVec3f:
1004 newobj = JS_NewObject(cx,&MFVec3fClass,NULL,NULL);
break;
1005 case FIELDTYPE_MFColor:
1006 newobj = JS_NewObject(cx,&MFColorClass,NULL,NULL);
break;
1007 case FIELDTYPE_MFNode:
1008 newobj = JS_NewObject(cx,&MFNodeClass,NULL,NULL);
break;
1009 case FIELDTYPE_MFVec2f:
1010 newobj = JS_NewObject(cx,&MFVec2fClass,NULL,NULL);
break;
1011 case FIELDTYPE_MFRotation:
1012 newobj = JS_NewObject(cx,&MFRotationClass,NULL,NULL);
break;
1013 default: printf (
"invalid type in X3D_MF_TO_JS\n");
return;
1016 if ((ptr = (
AnyNative *) AnyNativeNew(dataType,Data,valueChanged)) == NULL) {
1017 printf(
"AnyNativeNew failed in X3D_MF_TO_SF_B.\n");
1021 if (!JS_SetPrivateFw(cx, newobj, ptr)) {
1022 printf(
"JS_SetPrivate failed in X3D_MF_TO_SF_B.\n");
1027 *newval = OBJECT_TO_JSVAL(newobj);
1031 JSObject *obj2 = JSVAL_TO_OBJECT(*newval);
1032 if( (ptr2 = (
AnyNative*)JS_GetPrivateFw(cx,obj2)) == NULL){
1033 printf(
"native pointer doesn't survive reduction to jsval\n");
1035 printf(
"OK native pointer survives reduction to jsval");
1036 printf(
"ptr->v->mf.n=%d\n",ptr2->v->mfbool.n);
1047 ppjsUtils p = (ppjsUtils)gglobal()->jsUtils.prv;
1048 p->reportWarnings = JS_TRUE;
1053reportWarningsOff() {
1054 ppjsUtils p = (ppjsUtils)gglobal()->jsUtils.prv;
1055 p->reportWarnings = JS_FALSE;
1060errorReporter(JSContext *context,
const char *message, JSErrorReport *report)
1062 char *errorReport = 0;
1063 int len = 0, charPtrSize = (int)
sizeof(
char *);
1064 ppjsUtils p = (ppjsUtils)gglobal()->jsUtils.prv;
1069 fprintf(stderr,
"%s\n", message);
1074 if (JSREPORT_IS_WARNING(report->flags) && !p->reportWarnings) {
1078 if (report->filename == NULL) {
1079 len = (int) (strlen(message) + 1);
1081 len = (int) ((strlen(report->filename) + 1) + (strlen(message) + 1));
1084 errorReport = (
char *) JS_malloc(context, (len + STRING) * charPtrSize);
1090 if (JSREPORT_IS_WARNING(report->flags)) {
1091 sprintf(errorReport,
1092 "%swarning in %s at line %u:\n\t%s\n",
1093 JSREPORT_IS_STRICT(report->flags) ?
"strict " :
"",
1094 report->filename ? report->filename :
"",
1095 report->lineno ? report->lineno : 0,
1096 message ? message :
"No message.");
1098 sprintf(errorReport,
1099 "error in %s at line %u:\n\t%s\n",
1100 report->filename ? report->filename :
"",
1101 report->lineno ? report->lineno : 0,
1102 message ? message :
"No message.");
1105 fprintf(stderr,
"Javascript -- %s", errorReport);
1107 JS_free(context, errorReport);
1112static int *getFOP (
struct X3D_Node *node,
const char *str) {
1113 int *fieldOffsetsPtr;
1117 #ifdef JSVRMLCLASSESVERBOSE
1118 printf (
"...getFOP... it is a %s\n",stringNodeType(node->_nodeType));
1121 fieldOffsetsPtr = (
int *) NODE_OFFSETS[node->_nodeType];
1127 while (*fieldOffsetsPtr != -1) {
1128 #ifdef JSVRMLCLASSESVERBOSE
1129 printf (
"getFOP, looking at field %s type %s to match %s\n",FIELDNAMES[*fieldOffsetsPtr],FIELDTYPES[*(fieldOffsetsPtr+2)],str);
1134 if (strcmp(str,FIELDNAMES[*fieldOffsetsPtr]) == 0) {
1135 #ifdef JSVRMLCLASSESVERBOSE
1136 printf (
"getFOP, found entry for %s, it is %u (%p)\n",str,fieldOffsetsPtr,fieldOffsetsPtr);
1138 return fieldOffsetsPtr;
1140 fieldOffsetsPtr += FIELDOFFSET_LENGTH;
1145 printf (
"getFOP, could not find field \"%s\" in nodeType \"%s\"\n", str, stringNodeType(node->_nodeType));
1148 printf (
"getFOP, passed in X3D node was NULL!\n");
1155static JSBool getSFNodeField(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
1156 JSObject *obj = *hobj.address();
1157 jsid
id = *hiid.address();
1158 jsval *vp = hvp.address();
1163 int *fieldOffsetsPtr;
1167 _id_c = JS_EncodeString(cx,JSID_TO_STRING(
id));
1169 if ((ptr = (
SFNodeNative *)JS_GetPrivateFw(cx, obj)) == NULL) {
1170 printf(
"JS_GetPrivate failed in getSFNodeField.\n");
1174 node = X3D_NODE(ptr->handle);
1177 printf (
"getSFNodeField, can not set field \"%s\", NODE is NULL!\n",_id_c);
1183 fieldOffsetsPtr = getFOP(ptr->handle,
"FIFOsize");
1184 if (fieldOffsetsPtr == NULL) {
1186 printf(
"getSFNodeField : This is not a ringBuffer type\n");
1191 char *_id_buffer_c = NULL ;
1199 printf(
"getSFNodeField : This could be a ringBuffer type (found FIFOsize)\n");
1202 if (0 == strcmp(_id_c,
"int32Inp")) {
1204 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);
1207 buffer = (
RingBuffer *) OSCnode->_int32InpFIFO ;
1209 printf(
"getSFNodeField %d : buffer=%p\n",__LINE__,buffer) ;
1212 if (!RingBuffer_testEmpty(buffer)) {
1213 _id_buffer_c =
"_int32InpFIFO" ;
1214 iVal = RingBuffer_pullUnion(buffer)->i ;
1216 printf(
"getSFNodeField %d : iVal=%d\n",__LINE__,iVal);
1219 *vp = INT_TO_JSVAL(iVal) ;
1223 printf(
"but the buffer is empty\n") ;
1226 }
else if (0 == strcmp(_id_c,
"floatInp")) {
1228 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);
1230 buffer = (
RingBuffer *) OSCnode->_floatInpFIFO ;
1232 printf(
"getSFNodeField %d : buffer=%p\n",__LINE__,buffer) ;
1235 if (!RingBuffer_testEmpty(buffer)) {
1236 _id_buffer_c =
"_floatInpFIFO" ;
1237 fVal = RingBuffer_pullUnion(buffer)->f ;
1239 printf(
"getSFNodeField %d : fVal=%d\n",__LINE__,fVal);
1242 JS_NewNumberValue(cx,(
double)fVal,vp);
1246 printf(
"but the buffer is empty\n") ;
1249 }
else if (0 == strcmp(_id_c,
"stringInp")) {
1251 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);
1253 buffer = (
RingBuffer *) OSCnode->_stringInpFIFO ;
1255 printf(
"getSFNodeField %d : buffer=%p\n",__LINE__,buffer) ;
1258 if (!RingBuffer_testEmpty(buffer)) {
1259 _id_buffer_c =
"_stringInpFIFO" ;
1260 strPtr = (
char *) RingBuffer_pullUnion(buffer)->p ;
1262 printf(
"getSFNodeField %d : strPtr=%s\n",__LINE__,strPtr);
1265 *vp = STRING_TO_JSVAL(JS_NewStringCopyZ(cx,strPtr));
1269 printf(
"but the buffer is empty\n") ;
1274 printf(
"but this variable itself (%s) is not a ring buffer item\n",_id_c) ;
1281 fieldOffsetsPtr = getFOP(ptr->handle,_id_c);
1282 if (fieldOffsetsPtr == NULL) {
1294 switch (*(fieldOffsetsPtr+2)) {
1295 case FIELDTYPE_SFBool:
1296 case FIELDTYPE_SFFloat:
1297 case FIELDTYPE_SFTime:
1298 case FIELDTYPE_SFDouble:
1299 case FIELDTYPE_SFInt32:
1300 case FIELDTYPE_SFString:
1301 X3D_ECMA_TO_JS(cx, offsetPointer_deref (
void *, node, *(fieldOffsetsPtr+1)),
1302 returnElementLength(*(fieldOffsetsPtr+2)), *(fieldOffsetsPtr+2), vp);
1304 case FIELDTYPE_SFColor:
1305 case FIELDTYPE_SFNode:
1306 case FIELDTYPE_SFVec2f:
1307 case FIELDTYPE_SFVec3f:
1308 case FIELDTYPE_SFVec3d:
1309 case FIELDTYPE_SFRotation:
1310 X3D_SF_TO_JS(cx, obj, offsetPointer_deref (
void *, node, *(fieldOffsetsPtr+1)),
1311 returnElementLength(*(fieldOffsetsPtr+2)) * returnElementRowSize(*(fieldOffsetsPtr+2)) , *(fieldOffsetsPtr+2), vp);
1313 case FIELDTYPE_MFColor:
1314 case FIELDTYPE_MFVec3f:
1315 case FIELDTYPE_MFVec2f:
1316 case FIELDTYPE_MFFloat:
1317 case FIELDTYPE_MFTime:
1318 case FIELDTYPE_MFInt32:
1319 case FIELDTYPE_MFString:
1320 case FIELDTYPE_MFNode:
1321 case FIELDTYPE_MFRotation:
1322 case FIELDTYPE_SFImage:
1323 X3D_MF_TO_JS(cx, obj, offsetPointer_deref (
void *, node, *(fieldOffsetsPtr+1)), *(fieldOffsetsPtr+2), vp,
1324 (
char *)FIELDNAMES[*(fieldOffsetsPtr+0)]);
1326 default: printf (
"unhandled type FIELDTYPE_ %d in getSFNodeField\n", *(fieldOffsetsPtr+2)) ;
1330 #ifdef JSVRMLCLASSESVERBOSE
1331 printf (
"end of getSFNodeField\n");
1338JSBool setSFNodeField (JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
1339 JSObject *obj = *hobj.address();
1340 jsid
id = *hiid.address();
1341 jsval *vp = hvp.address();
1345 int *fieldOffsetsPtr;
1350 _id_c = JS_EncodeString(cx,JSID_TO_STRING(
id));
1353 #ifdef JSVRMLCLASSESVERBOSE
1354 printf (
"\nsetSFNodeField called on name %s object %u, jsval %u\n",_id_c, obj, *vp);
1358 if ((ptr = (
SFNodeNative *)JS_GetPrivateFw(cx, obj)) == NULL) {
1359 printf(
"JS_GetPrivate failed in setSFNodeField.\n");
1365 node = (
struct X3D_Node *) ptr->handle;
1368 printf (
"setSFNodeField, can not set field \"%s\", NODE is NULL!\n",_id_c);
1375 #ifdef JSVRMLCLASSESVERBOSE
1377 fieldOffsetsPtr = getFOP(ptr->handle,
"FIFOsize");
1379 if (fieldOffsetsPtr == NULL) {
1380 printf(
"setSFNodeField : This is not a ringBuffer type\n");
1382 printf(
"setSFNodeField : This is a ringBuffer type\n");
1389 fieldOffsetsPtr = getFOP(ptr->handle,_id_c);
1393 if (fieldOffsetsPtr == NULL) {
1402 #ifdef JSVRMLCLASSESVERBOSE
1403 printf (
"and a field type of %s\n",FIELDTYPES[*(fieldOffsetsPtr+2)]);
1406 switch (*(fieldOffsetsPtr+2)) {
1407 case FIELDTYPE_SFBool:
1408 case FIELDTYPE_SFFloat:
1409 case FIELDTYPE_SFTime:
1410 case FIELDTYPE_SFDouble:
1411 case FIELDTYPE_SFInt32:
1412 case FIELDTYPE_SFString:
1413 JS_ECMA_TO_X3D(cx, ((
void *)( ((
unsigned char *) node) + *(fieldOffsetsPtr+1))),
1414 returnElementLength(*(fieldOffsetsPtr+2)), *(fieldOffsetsPtr+2), vp);
1416 case FIELDTYPE_SFColor:
1417 case FIELDTYPE_SFNode:
1418 case FIELDTYPE_SFVec2f:
1419 case FIELDTYPE_SFVec3f:
1420 case FIELDTYPE_SFVec3d:
1421 case FIELDTYPE_SFRotation:
1422 JS_SF_TO_X3D(cx, ((
void *)( ((
unsigned char *) node) + *(fieldOffsetsPtr+1))),
1423 returnElementLength(*(fieldOffsetsPtr+2)) * returnElementRowSize(*(fieldOffsetsPtr+2)) , *(fieldOffsetsPtr+2), vp);
1425 case FIELDTYPE_MFColor:
1426 case FIELDTYPE_MFVec3f:
1427 case FIELDTYPE_MFVec2f:
1428 case FIELDTYPE_MFFloat:
1429 case FIELDTYPE_MFTime:
1430 case FIELDTYPE_MFInt32:
1431 case FIELDTYPE_MFString:
1432 case FIELDTYPE_MFNode:
1433 case FIELDTYPE_MFRotation:
1434 case FIELDTYPE_SFImage:
1435 JS_MF_TO_X3D(cx, obj, ((
void *)( ((
unsigned char *) node) + *(fieldOffsetsPtr+1))), *(fieldOffsetsPtr+2), vp);
1437 default: printf (
"unhandled type in setSFNodeField\n");
1444 #ifdef JSVRMLCLASSESVERBOSE
1445 printf (
"end of setSFNodeField\n");
1451#define UNHIDE_DEFINE_SFNODESPECIFIC 1
1452#ifdef UNHIDE_DEFINE_SFNODESPECIFIC
1454int JS_DefineSFNodeSpecificProperties (JSContext *context, JSObject *
object,
struct X3D_Node * ptr) {
1455 int *fieldOffsetsPtr;
1456 jsval rval = INT_TO_JSVAL(0);
1457 uintN attrs = JSPROP_PERMANENT
1459#ifdef JSPROP_EXPORTED
1466 #ifdef JSVRMLCLASSESVERBOSE
1474 #ifdef JSVRMLCLASSESVERBOSE
1475 nodeName = parser_getNameFromNode(ptr) ;
1476 if (nodeName == NULL) {
1477 printf (
"\nStart of JS_DefineSFNodeSpecificProperties for '---' ... working on node %u object %u (%p,%p)\n",ptr,
object,ptr,
object);
1479 printf (
"\nStart of JS_DefineSFNodeSpecificProperties for '%s' ... working on node %u object %u (%p,%p)\n",nodeName,ptr,
object,ptr,
object);
1480 confirmNode = parser_getNodeFromName(nodeName);
1481 if (confirmNode == NULL) {
1482 printf(
"RoundTrip failed : ptr (%p) -> nodeName (%s) -----\n",ptr,nodeName) ;
1484 printf(
"RoundTrip OK : ptr (%p) -> nodeName (%s) -> confirmNode (%p)\n",ptr,nodeName,confirmNode) ;
1490 #ifdef JSVRMLCLASSESVERBOSE
1491 printf (
"...JS_DefineSFNodeSpecificProperties... it is a %s\n",stringNodeType(ptr->_nodeType));
1495 if ((nodeNative = (
SFNodeNative *)JS_GetPrivateFw(context,
object)) == NULL) {
1496 printf (
"JS_DefineSFNodeSpecificProperties, can not get private for a SFNode!\n");
1499 if(SM_method() == 0)
1500 if (nodeNative->fieldsExpanded) {
1501 #ifdef JSVRMLCLASSESVERBOSE
1502 printf (
"JS_DefineSFNodeSpecificProperties, already done for node\n");
1508 fieldOffsetsPtr = (
int *) NODE_OFFSETS[ptr->_nodeType];
1514 while (*fieldOffsetsPtr != -1) {
1516 #ifdef JSVRMLCLASSESVERBOSE
1517 printf (
"looking at field %s type %s\n",FIELDNAMES[*fieldOffsetsPtr],FIELDTYPES[*(fieldOffsetsPtr+2)]);
1521 if( 0 == strcmp(
"FreeWRL_PROTOInterfaceNodes",FIELDNAMES[*fieldOffsetsPtr])) {
1523 #ifdef JSVRMLCLASSESVERBOSE
1524 printf (
"%s:%d Mangle %s before calling JS_DefineProperty ....\n",__FILE__,__LINE__,FIELDNAMES[*fieldOffsetsPtr]);
1528 char *saveptr1 = NULL;
1532 for (i=0; i < X3D_GROUP(ptr)->FreeWRL_PROTOInterfaceNodes.n; i++) {
1533 rval = INT_TO_JSVAL(*fieldOffsetsPtr);
1534 name = parser_getNameFromNode(X3D_GROUP(ptr)->FreeWRL_PROTOInterfaceNodes.p[i]);
1536 #ifdef JSVRMLCLASSESVERBOSE
1537 dump_scene(stdout,0,X3D_GROUP(ptr)->FreeWRL_PROTOInterfaceNodes.p[i]);
1538 printf (
"%s:%d dummy name=%s\n",__FILE__,__LINE__,name);
1541 str1 = MALLOC(
void *, 1+strlen(name));
1544 token = strtok_r(str1,
"_", &saveptr1);
1546 token = strtok_r(str1,
"_", &saveptr1);
1549 #ifdef JSVRMLCLASSESVERBOSE
1550 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);
1552 if (!JS_DefineProperty(context,
object, name, rval, getSFNodeField, setSFNodeField, attrs)) {
1553 printf(
"JS_DefineProperty failed for \"%s\" in JS_DefineSFNodeSpecificProperties.\n", name);
1557 }
else if (FIELDNAMES[*fieldOffsetsPtr][0] !=
'_') {
1559 if (FIELDNAMES[*fieldOffsetsPtr][0] !=
'_') {
1562 name = (
char *)FIELDNAMES[*fieldOffsetsPtr];
1563 rval = INT_TO_JSVAL(*fieldOffsetsPtr);
1570 #ifdef JSVRMLCLASSESVERBOSE
1571 printf (
"calling JS_DefineProperty on (context=%p, object=%p, name=%s, rval=%p), setting getSFNodeField, setSFNodeField\n",context,
object,name,rval);
1574 if (!JS_DefineProperty(context,
object, name, rval, getSFNodeField, setSFNodeField, attrs)) {
1575 printf(
"JS_DefineProperty failed for \"%s\" in JS_DefineSFNodeSpecificProperties.\n", name);
1579 fieldOffsetsPtr += FIELDOFFSET_LENGTH;
1583 if(SM_method() == 0)
1584 nodeNative->fieldsExpanded = TRUE;
1586 #ifdef JSVRMLCLASSESVERBOSE
1587 printf (
"JS_DefineSFNodeSpecificProperties, returning TRUE\n");
1618#define SET_TOUCHED_TYPE_MF_A(thisMFtype,thisSFtype) \
1619 else if (JS_InstanceOf (cx, obj, &thisMFtype##Class, NULL)) {\
1621 thisSFtype##Native *ptr; \
1623 if (!JS_GetElement(cx, obj, num, &mainElement)) { \
1624 printf ("JS_GetElement failed for %d in get_valueChanged_flag\n",num); \
1628 if ((ptr = (thisSFtype##Native *)JS_GetPrivateFw(cx, JSVAL_TO_OBJECT(mainElement))) == NULL) {\
1629 printf( "JS_GetPrivate failed in assignCheck.\n"); \
1633 ptr->valueChanged++; \
1641JSBool js_SetPropertyCheck(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
1642 JSObject *obj = *hobj.address();
1643 jsid iid = *hiid.address();
1644 jsval *vp = hvp.address();
1649 if (!JS_IdToValue(cx,iid,&
id)) {
1650 printf(
"js_SetPropertyCheck: JS_IdToValue failed.\n");
1656 if (JS_InstanceOf (cx, obj, &MFStringClass, NULL)) {
1657 SET_MF_ECMA_HAS_CHANGED;
1660 else if (JS_InstanceOf (cx, obj, &MFFloatClass, NULL)) {
1661 SET_MF_ECMA_HAS_CHANGED;
1664 else if (JS_InstanceOf (cx, obj, &MFInt32Class, NULL)) {
1665 SET_MF_ECMA_HAS_CHANGED;
1670 else if (JS_InstanceOf (cx, obj, &MFBoolClass, NULL)) {
1671 SET_MF_ECMA_HAS_CHANGED;
1677 SET_TOUCHED_TYPE_MF_A(MFNode,SFNode)
1678 SET_TOUCHED_TYPE_MF_A(MFVec2f,
SFVec2f)
1679 SET_TOUCHED_TYPE_MF_A(MFVec3f,
SFVec3f)
1681 SET_TOUCHED_TYPE_MF_A(MFColor,
SFColor)
1685 #ifdef JSVRMLCLASSESVERBOSE
1686 printf (
"this is a class of "); printJSNodeType (cx,obj);
1695JSBool js_GetPropertyDebug (JSContext *context, JSObject *obj, jsid iid, jsval *vp) {
1697 #ifdef JSVRMLCLASSESVERBOSE
1698 char *_id_c =
"(no value in string)";
1701#if JS_VERSION >= 185
1703 if (!JS_IdToValue(context,iid,&
id)) {
1704 printf(
"js_GetPropertyDebug: JS_IdToValue failed -- NOT returning false\n");
1708 if (JSVAL_IS_STRING(
id)) {
1710 _id_c = JS_GetStringBytes(JSVAL_TO_STRING(
id));
1712 _id_c = JS_EncodeString(context,JSVAL_TO_STRING(
id));
1714 printf (
"\n...js_GetPropertyDebug called on string \"%s\" object %u, jsval %lu\n",_id_c, (
unsigned int) obj, *vp);
1715#if JS_VERSION >= 185
1716 JS_free(context,_id_c);
1718 }
else if (JSVAL_IS_INT(
id)) {
1719 num = JSVAL_TO_INT(
id);
1720 printf (
"\n...js_GetPropertyDebug called on number %d object %u, jsval %lu\n",num, (
unsigned int) obj, *vp);
1722 printf (
"\n...js_GetPropertyDebug called on unknown type of object %u, jsval %lu\n", (
unsigned int) obj, *vp);
1728#ifdef JSVRMLCLASSESVERBOSE
1730void js_SetPropertyDebugWrapped (JSContext *context, JSObject *obj, jsval
id, jsval *vp,
char *debugString) {
1732void js_SetPropertyDebugWrapped (JSContext *context, JSObject *obj, jsid iid, jsval *vp,
char *debugString) {
1734 char *_id_c =
"(no value in string)";
1736#if JS_VERSION >= 185
1738 if (!JS_IdToValue(context,iid,&
id)) {
1739 printf(
"js_GetPropertyDebug: JS_IdToValue failed\n");
1744 if (JSVAL_IS_STRING(
id)) {
1746 _id_c = JS_GetStringBytes(JSVAL_TO_STRING(
id));
1748 _id_c = JS_EncodeString(context,JSVAL_TO_STRING(
id));
1750 printf (
"\n...js_SetPropertyDebug%s called on string \"%s\" object %p, jsval %lu\n",debugString,_id_c, obj, *vp);
1751#if JS_VERSION >= 185
1752 JS_free(context,_id_c);
1754 }
else if (JSVAL_IS_INT(
id)) {
1755 num = JSVAL_TO_INT(
id);
1756 printf (
"\n...js_SetPropertyDebug%s called on number %d object %p, jsval %lu\n",debugString,num, obj, *vp);
1758 printf (
"\n...js_SetPropertyDebug%s called on unknown type of object %p, jsval %lu\n",debugString, obj, *vp);
1763JSBool js_SetPropertyDebug (JSContext *context, JSObject *obj, jsid
id, JSBool strict, jsval *vp) {
1765 #ifdef JSVRMLCLASSESVERBOSE
1766 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"");
1771JSBool js_SetPropertyDebug1 (JSContext *context, JSObject *obj, jsid
id, JSBool strict, jsval *vp) {
1773 #ifdef JSVRMLCLASSESVERBOSE
1774 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"1");
1778JSBool js_SetPropertyDebug2 (JSContext *context, JSObject *obj, jsid
id, JSBool strict, jsval *vp) {
1780 #ifdef JSVRMLCLASSESVERBOSE
1781 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"2");
1787JSBool js_SetPropertyDebug3 (JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
1788 JSObject *obj = *hobj.address();
1789 jsid
id = *hiid.address();
1790 jsval *vp = hvp.address();
1792 #ifdef JSVRMLCLASSESVERBOSE
1793 js_SetPropertyDebugWrapped(cx,obj,
id,vp,
"3");
1797JSBool js_SetPropertyDebug4 (JSContext *context, JSObject *obj, jsid
id, JSBool strict, jsval *vp) {
1799 #ifdef JSVRMLCLASSESVERBOSE
1800 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"4");
1805JSBool js_SetPropertyDebug5(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
1806 JSObject *obj = *hobj.address();
1807 jsid
id = *hiid.address();
1808 jsval *vp = hvp.address();
1810 #ifdef JSVRMLCLASSESVERBOSE
1811 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"5");
1816JSBool js_SetPropertyDebug6 (JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
1817 JSObject *obj = *hobj.address();
1818 jsid
id = *hiid.address();
1819 jsval *vp = hvp.address();
1820 #ifdef JSVRMLCLASSESVERBOSE
1821 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"6");
1825JSBool js_SetPropertyDebug7 (JSContext *context, JSObject *obj, jsid
id, JSBool strict, jsval *vp) {
1827 #ifdef JSVRMLCLASSESVERBOSE
1828 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"7");
1832JSBool js_SetPropertyDebug8 (JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
1833 JSObject *obj = *hobj.address();
1834 jsid
id = *hiid.address();
1835 jsval *vp = hvp.address();
1837 #ifdef JSVRMLCLASSESVERBOSE
1838 js_SetPropertyDebugWrapped(cx,obj,
id,vp,
"8");
1842JSBool js_SetPropertyDebug9 (JSContext *context, JSObject *obj, jsid
id, JSBool strict, jsval *vp) {
1844 #ifdef JSVRMLCLASSESVERBOSE
1845 js_SetPropertyDebugWrapped(context,obj,
id,vp,
"9");