40#define STRING_SIZE 256
44#define jsuint uint32_t
46#define jsdouble double
48#define JS_FinalizeStub NULL
65#include "../scenegraph/LinearAlgebra.h"
66#include "../scenegraph/quaternion.h"
86#include "jsUtils_sm.h"
87#include "jsVRMLClasses_sm.h"
99JS_MY_Finalize(JSContext *cx, JSObject *obj){
101JS_MY_Finalize(JSFreeOp *fop, JSObject *obj){
106 #ifdef JSVRMLCLASSESVERBOSE
107 printf (
"finalizing %p\n",obj);
113 if ((ptr = (
void *)JS_GetPrivateFw(cx, obj)) != NULL) {
117 if(SM_method() == 2){
119 if(any->gc) FREE_IF_NZ(any->v);
122 JS_SetPrivateFw(cx,obj,NULL);
127 #ifdef JSVRMLCLASSESVERBOSE
129 printf (
"Finalize - no private data!\n");
137MFColorToString(JSContext *cx, uintN argc, jsval *vp) {
138 JSObject *obj = JS_THIS_OBJECT(cx,vp);
139 jsval *argv = JS_ARGV(cx,vp);
144 if (!doMFToString(cx, obj,
"MFColor", &rval)) {
return JS_FALSE; }
145 JS_SET_RVAL(cx,vp,rval);
151MFColorAssign(JSContext *cx, uintN argc, jsval *vp) {
152 JSObject *obj = JS_THIS_OBJECT(cx,vp);
153 jsval *argv = JS_ARGV(cx,vp);
155 if (!_standardMFAssign (cx, obj, argc, argv, &rval, &MFColorClass,FIELDTYPE_SFColor)) {
return JS_FALSE; }
156 JS_SET_RVAL(cx,vp,rval);
162MFColorConstr(JSContext *cx, uintN argc, jsval *vp) {
163 JSObject *obj = JS_NewObject(cx,&MFColorClass,NULL,NULL);
164 jsval *argv = JS_ARGV(cx,vp);
165 jsval rval = OBJECT_TO_JSVAL(obj);
166 if (!MFColorConstrInternals(cx,obj,argc,argv,&rval)) {
return JS_FALSE; }
167 JS_SET_RVAL(cx,vp,rval);
170JSBool MFColorConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
181 if(argc == 1 && argv){
184 if (!JS_ValueToObject(cx, argv[0], &_arrayObj)) {
185 printf(
"JS_ValueToObject failed in MFVec3fConstr.\n");
189 if(JS_IsArrayObject(cx, _arrayObj)){
194 JS_GetArrayLength(cx,_arrayObj, &lengthp);
199 if(SM_method() == 2){
202 if((any = (
AnyNative*)AnyNativeNew(FIELDTYPE_MFColor,NULL,NULL)) == NULL){
203 printf(
"AnyfNativeNew failed in MFColorConstr.\n");
206 if (!JS_SetPrivateFw(cx, obj, any)) {
207 printf(
"JS_SetPrivate failed in MFColorConstr.\n");
211 newsize =
sizeof(
struct SFColor)*upper_power_of_two(argc);
213 anyv->mfcolor.p = MALLOC(
struct SFColor*,newsize);
214 memset(anyv->mfcolor.p,0,newsize);
218 DEFINE_LENGTH(cx,obj,argc)
224 #ifdef JSVRMLCLASSESVERBOSE
225 printf(
"MFColorConstr: obj = %p, %u args\n",
229 for (i = 0; i < argc; i++) {
232 JS_GetElement(cx, _arrayObj, i, &vp);
237 if (!JS_ValueToObject(cx, vp, &_obj)) {
239 "JS_ValueToObject failed in MFColorConstr.\n");
243 CHECK_CLASS(cx,_obj,NULL,__FUNCTION__,SFColorClass)
246 if((any2 = (
AnyNative *)JS_GetPrivateFw(cx,_obj)) != NULL){
249 if(any2->type == FIELDTYPE_SFColor || any2->type == FIELDTYPE_SFVec3f || any2->type == FIELDTYPE_SFColorRGBA){
250 shallow_copy_field(FIELDTYPE_SFColor,any2->v,(
union anyVrml*)&anyv->mfcolor.p[i]);
251 anyv->mfcolor.n = i+1;
256 if (!JS_DefineElement(cx, obj, (jsint) i, vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
257 printf(
"JS_DefineElement failed for arg %u in MFColorConstr.\n", i);
262 *rval = OBJECT_TO_JSVAL(obj);
268MFColorAddProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
269 JSObject *obj = *hobj.address();
270 jsid
id = *hiid.address();
271 jsval *vp = hvp.address();
273 return doMFAddProperty(cx, obj,
id, vp,
"MFColorAddProperty");
277MFColorGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
278 JSObject *obj = *hobj.address();
279 jsid
id = *hiid.address();
280 jsval *vp = hvp.address();
282 return _standardMFGetProperty(cx, obj,
id, vp,
283 "_FreeWRL_Internal = new SFColor()", FIELDTYPE_MFColor);
287MFColorSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
288 JSObject *obj = *hobj.address();
289 jsid
id = *hiid.address();
290 jsval *vp = hvp.address();
292 return doMFSetProperty(cx, obj,
id, vp,FIELDTYPE_MFColor);
296MFFloatToString(JSContext *cx, uintN argc, jsval *vp) {
297 JSObject *obj = JS_THIS_OBJECT(cx,vp);
298 jsval *argv = JS_ARGV(cx,vp);
303 if (!doMFToString(cx, obj,
"MFFloat", &rval)) {
305 JS_SET_RVAL(cx,vp,rval);
311MFFloatAssign(JSContext *cx, uintN argc, jsval *vp) {
312 JSObject *obj = JS_THIS_OBJECT(cx,vp);
313 jsval *argv = JS_ARGV(cx,vp);
315 SET_MF_ECMA_HAS_CHANGED
317 if (!_standardMFAssign (cx, obj, argc, argv, &rval, &MFFloatClass,FIELDTYPE_SFFloat)) {
return JS_FALSE; }
318 JS_SET_RVAL(cx,vp,rval);
323MFFloatConstr(JSContext *cx, uintN argc, jsval *vp) {
324 JSObject *obj = JS_NewObject(cx,&MFFloatClass,NULL,NULL);
325 jsval *argv = JS_ARGV(cx,vp);
326 jsval rval = OBJECT_TO_JSVAL(obj);
327 if (!MFFloatConstrInternals(cx,obj,argc,argv,&rval)) {
return JS_FALSE; }
328 JS_SET_RVAL(cx,vp,rval);
331JSBool MFFloatConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
343 if(argc == 1 && argv){
346 if (!JS_ValueToObject(cx, argv[0], &_arrayObj)) {
347 printf(
"JS_ValueToObject failed in MFVec3fConstr.\n");
351 if(JS_IsArrayObject(cx, _arrayObj)){
356 JS_GetArrayLength(cx,_arrayObj, &lengthp);
361 if(SM_method() == 2){
363 if((any = (
AnyNative*)AnyNativeNew(FIELDTYPE_MFFloat,NULL,NULL)) == NULL){
364 printf(
"AnyfNativeNew failed in MFFloatConstr.\n");
367 if (!JS_SetPrivateFw(cx, obj, any)) {
368 printf(
"JS_SetPrivate failed in MFFloatConstr.\n");
373 anyv->mffloat.p = (
float*)malloc(
sizeof(
float)*upper_power_of_two(argc));
376 DEFINE_LENGTH(cx,obj,argc)
377 DEFINE_MF_ECMA_HAS_CHANGED
384 #ifdef JSVRMLCLASSESVERBOSE
385 printf(
"MFFloatConstr: obj = %p, %u args\n", obj, argc);
387 for (i = 0; i < argc; i++) {
390 JS_GetElement(cx, _arrayObj, i, &vp);
395 if (!JS_ValueToNumber(cx, vp, &_d)) {
396 printf(
"JS_ValueToNumber failed in MFFloatConstr.\n");
400 anyv->mffloat.p[i] = _d;
401 anyv->mffloat.n = i+1;
403 if (!JS_DefineElement(cx, obj, (jsint) i, vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
404 printf(
"JS_DefineElement failed for arg %u in MFFloatConstr.\n", i);
409 *rval = OBJECT_TO_JSVAL(obj);
414MFFloatAddProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
415 JSObject *obj = *hobj.address();
416 jsid
id = *hiid.address();
417 jsval *vp = hvp.address();
418 return doMFAddProperty(cx, obj,
id, vp,
"MFFloatAddProperty");
422MFFloatGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
423 JSObject *obj = *hobj.address();
424 jsid
id = *hiid.address();
425 jsval *vp = hvp.address();
427 return _standardMFGetProperty(cx, obj,
id, vp,
428 "_FreeWRL_Internal = 0.0", FIELDTYPE_MFFloat);
432MFFloatSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
433 JSObject *obj = *hobj.address();
434 jsid
id = *hiid.address();
435 jsval *vp = hvp.address();
437 return doMFSetProperty(cx, obj,
id, vp,FIELDTYPE_MFFloat);
442MFInt32ToString(JSContext *cx, uintN argc, jsval *vp) {
443 JSObject *obj = JS_THIS_OBJECT(cx,vp);
444 jsval *argv = JS_ARGV(cx,vp);
449 #ifdef JSVRMLCLASSESVERBOSE
450 printf (
"start of MFInt32ToString\n");
453 if (!doMFToString(cx, obj,
"MFInt32", &rval)) {
return JS_FALSE; }
454 JS_SET_RVAL(cx,vp,rval);
460MFInt32Assign(JSContext *cx, uintN argc, jsval *vp) {
461 JSObject *obj = JS_THIS_OBJECT(cx,vp);
462 jsval *argv = JS_ARGV(cx,vp);
465 #ifdef JSVRMLCLASSESVERBOSE
466 printf (
"start of MFInt32Assign\n");
469 SET_MF_ECMA_HAS_CHANGED
471 if (!_standardMFAssign (cx, obj, argc, argv, &rval, &MFInt32Class,FIELDTYPE_SFInt32)) {
return JS_FALSE; }
472 JS_SET_RVAL(cx,vp,rval);
479MFInt32Constr(JSContext *cx, uintN argc, jsval *vp) {
480 JSObject *obj = JS_NewObject(cx,&MFInt32Class,NULL,NULL);
481 jsval *argv = JS_ARGV(cx,vp);
482 jsval rval = OBJECT_TO_JSVAL(obj);
483 if (!MFInt32ConstrInternals(cx,obj,argc,argv,&rval)) {
return JS_FALSE; }
484 JS_SET_RVAL(cx,vp,rval);
487JSBool MFInt32ConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
494 #ifdef JSVRMLCLASSESVERBOSE
495 printf (
"start of MFInt32Constr\n");
500 if(argc == 1 && argv){
503 if (!JS_ValueToObject(cx, argv[0], &_arrayObj)) {
504 printf(
"JS_ValueToObject failed in MFVec3fConstr.\n");
508 if(JS_IsArrayObject(cx, _arrayObj)){
513 JS_GetArrayLength(cx,_arrayObj, &lengthp);
518 if(SM_method() == 2){
521 if((any = (
AnyNative*)AnyNativeNew(FIELDTYPE_MFInt32,NULL,NULL)) == NULL){
522 printf(
"AnyfNativeNew failed in MFInt32Constr.\n");
525 if (!JS_SetPrivateFw(cx, obj, any)) {
526 printf(
"JS_SetPrivate failed in MFInt32Constr.\n");
530 newsize =
sizeof(int) * upper_power_of_two(argc);
532 anyv->mfint32.p = MALLOC(
int*,newsize);
533 memset(anyv->mfint32.p,0,newsize);
537 DEFINE_LENGTH(cx,obj,argc)
538 DEFINE_MF_ECMA_HAS_CHANGED
544 #ifdef JSVRMLCLASSESVERBOSE
545 printf(
"MFInt32Constr: obj = %p, %u args\n", obj, argc);
549 for (i = 0; i < argc; i++) {
552 JS_GetElement(cx, _arrayObj, i, &vp);
560 printf(
"JS_ValueToInt32 failed in MFInt32Constr.\n");
564 #ifdef JSVRMLCLASSESVERBOSE
565 printf (
"value at %d is %d\n",i,_i);
568 anyv->mfint32.p[i] = _i;
569 anyv->mfint32.n = i+1;
571 if (!JS_DefineElement(cx, obj, (jsint) i, vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
572 printf(
"JS_DefineElement failed for arg %u in MFInt32Constr.\n", i);
578 *rval = OBJECT_TO_JSVAL(obj);
583MFInt32AddProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
584 JSObject *obj = *hobj.address();
585 jsid
id = *hiid.address();
586 jsval *vp = hvp.address();
588 #ifdef JSVRMLCLASSESVERBOSE
589 printf (
"start of MFInt32AddProperty\n");
592 return doMFAddProperty(cx, obj,
id, vp,
"MFInt32AddProperty");
596MFInt32GetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
597 JSObject *obj = *hobj.address();
598 jsid
id = *hiid.address();
599 jsval *vp = hvp.address();
601 #ifdef JSVRMLCLASSESVERBOSE
602 printf (
"start of MFInt32GetProperty\n");
605 return _standardMFGetProperty(cx, obj,
id, vp,
606 "_FreeWRL_Internal = 0", FIELDTYPE_MFInt32);
610MFInt32SetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
611 JSObject *obj = *hobj.address();
612 jsid
id = *hiid.address();
613 jsval *vp = hvp.address();
615 #ifdef JSVRMLCLASSESVERBOSE
616 printf (
"start of MFInt32SetProperty\n");
619 return doMFSetProperty(cx, obj,
id, vp,FIELDTYPE_MFInt32);
624MFNodeToString(JSContext *cx, uintN argc, jsval *vp) {
625 JSObject *obj = JS_THIS_OBJECT(cx,vp);
626 jsval *argv = JS_ARGV(cx,vp);
632 #ifdef JSVRMLCLASSESVERBOSE
633 printf (
"start of MFNODETOSTRING, obj %p\n",obj);
635 if (!doMFToString(cx, obj,
"MFNode", &rval)) {
return JS_FALSE; }
636 JS_SET_RVAL(cx,vp,rval);
642MFNodeAssign(JSContext *cx, uintN argc, jsval *vp) {
643 JSObject *obj = JS_THIS_OBJECT(cx,vp);
644 jsval *argv = JS_ARGV(cx,vp);
647 #ifdef JSVRMLCLASSESVERBOSE
648 printf (
"start of MFNODEASSIGN, obj %p\n",obj);
651 if (!_standardMFAssign (cx, obj, argc, argv, &rval, &MFNodeClass,FIELDTYPE_SFNode)) {
return JS_FALSE; }
652 JS_SET_RVAL(cx,vp,rval);
658MFNodeConstr(JSContext *cx, uintN argc, jsval *vp) {
659 JSObject *obj = JS_NewObject(cx,&MFNodeClass,NULL,NULL);
660 jsval *argv = JS_ARGV(cx,vp);
661 jsval rval = OBJECT_TO_JSVAL(obj);
662 if (!MFNodeConstrInternals(cx,obj,argc,argv,&rval)) {
return JS_FALSE; }
663 JS_SET_RVAL(cx,vp,rval);
666JSBool MFNodeConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
676 if(argc == 1 && argv){
679 if (!JS_ValueToObject(cx, argv[0], &_arrayObj)) {
680 printf(
"JS_ValueToObject failed in MFVec3fConstr.\n");
684 if(JS_IsArrayObject(cx, _arrayObj)){
689 JS_GetArrayLength(cx,_arrayObj, &lengthp);
694 if(SM_method() == 2){
697 if((any = (
AnyNative*)AnyNativeNew(FIELDTYPE_MFNode,NULL,NULL)) == NULL){
698 printf(
"AnyfNativeNew failed in MFNodeConstr.\n");
701 if (!JS_SetPrivateFw(cx, obj, any)) {
702 printf(
"JS_SetPrivate failed in MFNodeConstr.\n");
706 newsize =
sizeof(
struct X3D_Node *) * upper_power_of_two(argc);
708 anyv->mfnode.p = MALLOC(
struct X3D_Node**,newsize);
709 memset(anyv->mfnode.p,0,newsize);
713 DEFINE_LENGTH(cx,obj,argc)
719 #ifdef JSVRMLCLASSESVERBOSE
720 printf(
"MFNodeConstr: obj = %p, %u args\n", obj, argc);
723 for (i = 0; i < argc; i++) {
726 JS_GetElement(cx, _arrayObj, i, &vp);
732 if ((vp).isObject()) {
734 if (!JS_ValueToObject(cx, vp, &_obj)) {
735 printf(
"JS_ValueToObject failed in MFNodeConstr.\n");
739 CHECK_CLASS(cx,_obj,NULL,__FUNCTION__,SFNodeClass)
742 if((any2 = (
AnyNative *)JS_GetPrivateFw(cx,_obj)) != NULL){
743 if(any2->type == FIELDTYPE_SFNode){
744 shallow_copy_field(FIELDTYPE_SFNode,any2->v,(
union anyVrml*)&anyv->mfnode.p[i]);
745 anyv->mfnode.n = i+1;
750 if (!JS_DefineElement(cx, obj, (jsint) i, vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
751 printf(
"JS_DefineElement failed for arg %d in MFNodeConstr.\n", i);
759 #ifdef JSVRMLCLASSESVERBOSE
760 if (JSVAL_IS_NULL(argv[i])) { printf (
"MFNodeConstr - its a NULL\n");}
761 if (JSVAL_IS_INT(argv[i])) { printf (
"MFNodeConstr - its a INT\n");}
762 if (JSVAL_IS_STRING(argv[i])) { printf (
"MFNodeConstr - its a STRING\n");}
766 *rval = OBJECT_TO_JSVAL(obj);
771MFNodeAddProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
772 JSObject *obj = *hobj.address();
773 jsid
id = *hiid.address();
774 jsval *vp = hvp.address();
776 #ifdef JSVRMLCLASSESVERBOSE
777 printf (
"startof MFNODEADDPROPERTY\n");
779 return doMFAddProperty(cx, obj,
id, vp,
"MFNodeAddProperty");
783MFNodeGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
784 JSObject *obj = *hobj.address();
785 jsid
id = *hiid.address();
786 jsval *vp = hvp.address();
788 #ifdef JSVRMLCLASSESVERBOSE
789 printf (
"start of MFNODEGETPROPERTY obj %p\n",obj);
791 return _standardMFGetProperty(cx, obj,
id, vp,
792 "_FreeWRL_Internal = 0",
797MFNodeSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
798 JSObject *obj = *hobj.address();
799 jsid
id = *hiid.address();
800 jsval *vp = hvp.address();
802 return doMFSetProperty(cx, obj,
id, vp,FIELDTYPE_MFNode);
807MFTimeAddProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
808 JSObject *obj = *hobj.address();
809 jsid
id = *hiid.address();
810 jsval *vp = hvp.address();
812 return doMFAddProperty(cx, obj,
id, vp,
"MFTimeAddProperty");
816MFTimeGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
817 JSObject *obj = *hobj.address();
818 jsid
id = *hiid.address();
819 jsval *vp = hvp.address();
821 return _standardMFGetProperty(cx, obj,
id, vp,
822 "_FreeWRL_Internal = 0.0",
827MFTimeSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
828 JSObject *obj = *hobj.address();
829 jsid
id = *hiid.address();
830 jsval *vp = hvp.address();
832 return doMFSetProperty(cx, obj,
id, vp,FIELDTYPE_MFTime);
836MFTimeToString(JSContext *cx, uintN argc, jsval *vp) {
837 JSObject *obj = JS_THIS_OBJECT(cx,vp);
838 jsval *argv = JS_ARGV(cx,vp);
843 if (!doMFToString(cx, obj,
"MFTime", &rval)) {
return JS_FALSE; }
844 JS_SET_RVAL(cx,vp,rval);
850MFTimeConstr(JSContext *cx, uintN argc, jsval *vp) {
851 JSObject *obj = JS_NewObject(cx,&MFTimeClass,NULL,NULL);
852 jsval *argv = JS_ARGV(cx,vp);
853 jsval rval = OBJECT_TO_JSVAL(obj);
854 if (!MFTimeConstrInternals(cx,obj,argc,argv,&rval)) {
return JS_FALSE; }
855 JS_SET_RVAL(cx,vp,rval);
858JSBool MFTimeConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
868 if(argc == 1 && argv){
871 if (!JS_ValueToObject(cx, argv[0], &_arrayObj)) {
872 printf(
"JS_ValueToObject failed in MFVec3fConstr.\n");
876 if(JS_IsArrayObject(cx, _arrayObj)){
881 JS_GetArrayLength(cx,_arrayObj, &lengthp);
886 if(SM_method() == 2){
889 if((any = (
AnyNative*)AnyNativeNew(FIELDTYPE_MFTime,NULL,NULL)) == NULL){
890 printf(
"AnyfNativeNew failed in MFTimeConstr.\n");
893 if (!JS_SetPrivateFw(cx, obj, any)) {
894 printf(
"JS_SetPrivate failed in MFTimeConstr.\n");
898 newsize =
sizeof(double) * upper_power_of_two(argc);
900 anyv->mftime.p = MALLOC(
double*,newsize);
901 memset(anyv->mftime.p,0,newsize);
905 DEFINE_LENGTH(cx,obj,argc)
906 DEFINE_MF_ECMA_HAS_CHANGED
912 #ifdef JSVRMLCLASSESVERBOSE
913 printf(
"MFTimeConstr: obj = %p, %u args\n", obj, argc);
915 for (i = 0; i < argc; i++) {
918 JS_GetElement(cx, _arrayObj, i, &vp);
923 if (!JS_ValueToNumber(cx, vp, &_d)) {
925 "JS_ValueToNumber failed in MFTimeConstr.\n");
929 anyv->mftime.p[i] = _d;
930 anyv->mftime.n = i+1;
932 if (!JS_DefineElement(cx, obj, (jsint) i, vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
933 printf(
"JS_DefineElement failed for arg %u in MFTimeConstr.\n", i);
938 *rval = OBJECT_TO_JSVAL(obj);
943MFTimeAssign(JSContext *cx, uintN argc, jsval *vp) {
944 JSObject *obj = JS_THIS_OBJECT(cx,vp);
945 jsval *argv = JS_ARGV(cx,vp);
948 SET_MF_ECMA_HAS_CHANGED
950 if (!_standardMFAssign (cx, obj, argc, argv, &rval, &MFTimeClass,FIELDTYPE_SFTime)) {
return JS_FALSE; }
951 JS_SET_RVAL(cx,vp,rval);
959MFVec2fAddProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
960 JSObject *obj = *hobj.address();
961 jsid
id = *hiid.address();
962 jsval *vp = hvp.address();
964 return doMFAddProperty(cx, obj,
id, vp,
"MFVec2fAddProperty");
968MFVec2fGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
969 JSObject *obj = *hobj.address();
970 jsid
id = *hiid.address();
971 jsval *vp = hvp.address();
973 return _standardMFGetProperty(cx, obj,
id, vp,
974 "_FreeWRL_Internal = new SFVec2f()",FIELDTYPE_MFVec2f);
978MFVec2fSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
979 JSObject *obj = *hobj.address();
980 jsid
id = *hiid.address();
981 jsval *vp = hvp.address();
983 return doMFSetProperty(cx, obj,
id, vp,FIELDTYPE_MFVec2f);
987MFVec2fToString(JSContext *cx, uintN argc, jsval *vp) {
988 JSObject *obj = JS_THIS_OBJECT(cx,vp);
989 jsval *argv = JS_ARGV(cx,vp);
994 if (!doMFToString(cx, obj,
"MFVec2f", &rval)) {
return JS_FALSE; }
995 JS_SET_RVAL(cx,vp,rval);
1001MFVec2fConstr(JSContext *cx, uintN argc, jsval *vp) {
1002 JSObject *obj = JS_NewObject(cx,&MFVec2fClass,NULL,NULL);
1003 jsval *argv = JS_ARGV(cx,vp);
1004 jsval rval = OBJECT_TO_JSVAL(obj);
1005 if (!MFVec2fConstrInternals(cx,obj,argc,argv,&rval)) {
return JS_FALSE; }
1006 JS_SET_RVAL(cx,vp,rval);
1009JSBool MFVec2fConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1011 JSObject *_arrayObj;
1019 if(argc == 1 && argv){
1022 if (!JS_ValueToObject(cx, argv[0], &_arrayObj)) {
1023 printf(
"JS_ValueToObject failed in MFVec3fConstr.\n");
1027 if(JS_IsArrayObject(cx, _arrayObj)){
1032 JS_GetArrayLength(cx,_arrayObj, &lengthp);
1037 if(SM_method() == 2){
1040 if((any = (
AnyNative*)AnyNativeNew(FIELDTYPE_MFVec2f,NULL,NULL)) == NULL){
1041 printf(
"AnyfNativeNew failed in MFVec2fConstr.\n");
1044 if (!JS_SetPrivateFw(cx, obj, any)) {
1045 printf(
"JS_SetPrivate failed in MFVec2fConstr.\n");
1049 newsize =
sizeof(
struct SFVec2f)*upper_power_of_two(argc);
1051 anyv->mfvec2f.p = MALLOC(
struct SFVec2f*,newsize);
1052 memset(anyv->mfvec2f.p,0,newsize);
1056 DEFINE_LENGTH(cx,obj,argc)
1063 #ifdef JSVRMLCLASSESVERBOSE
1064 printf(
"MFVec2fConstr: obj = %p, %u args\n", obj, argc);
1067 for (i = 0; i < argc; i++) {
1070 JS_GetElement(cx, _arrayObj, i, &vp);
1075 if (!JS_ValueToObject(cx, vp, &_obj)) {
1076 printf(
"JS_ValueToObject failed in MFVec2fConstr.\n");
1080 CHECK_CLASS(cx,_obj,NULL,__FUNCTION__,SFVec2fClass)
1083 if((any2 = (
AnyNative *)JS_GetPrivateFw(cx,_obj)) != NULL){
1086 if(any2->type == FIELDTYPE_SFVec2f || any2->type == FIELDTYPE_SFColor || any2->type == FIELDTYPE_SFVec3f || any2->type == FIELDTYPE_SFColorRGBA){
1087 shallow_copy_field(FIELDTYPE_SFVec2f,any2->v,(
union anyVrml*)&anyv->mfvec2f.p[i]);
1088 anyv->mfvec2f.n = i+1;
1093 if (!JS_DefineElement(cx, obj, (jsint) i, vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
1094 printf(
"JS_DefineElement failed for arg %d in MFVec2fConstr.\n", i);
1099 *rval = OBJECT_TO_JSVAL(obj);
1104MFVec2fAssign(JSContext *cx, uintN argc, jsval *vp) {
1105 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1106 jsval *argv = JS_ARGV(cx,vp);
1108 if (!_standardMFAssign (cx, obj, argc, argv, &rval, &MFVec2fClass,FIELDTYPE_SFVec2f)) {
return JS_FALSE; }
1109 JS_SET_RVAL(cx,vp,rval);
1116MFVec3fAddProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
1117 JSObject *obj = *hobj.address();
1118 jsid
id = *hiid.address();
1119 jsval *vp = hvp.address();
1120 return doMFAddProperty(cx, obj,
id, vp,
"MFVec3fAddProperty");
1124MFVec3fGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
1125 JSObject *obj = *hobj.address();
1126 jsid
id = *hiid.address();
1127 jsval *vp = hvp.address();
1129 return _standardMFGetProperty(cx, obj,
id, vp,
1130 "_FreeWRL_Internal = new SFVec3f()",FIELDTYPE_MFVec3f);
1134MFVec3fSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
1135 JSObject *obj = *hobj.address();
1136 jsid
id = *hiid.address();
1137 jsval *vp = hvp.address();
1139 return doMFSetProperty(cx, obj,
id, vp,FIELDTYPE_MFVec3f);
1143MFVec3fToString(JSContext *cx, uintN argc, jsval *vp) {
1144 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1145 jsval *argv = JS_ARGV(cx,vp);
1151 if (!doMFToString(cx, obj,
"MFVec3f", &rval)) {
return JS_FALSE; }
1152 JS_SET_RVAL(cx,vp,rval);
1158MFVec3fConstr(JSContext *cx, uintN argc, jsval *vp) {
1159 JSObject *obj = JS_NewObject(cx,&MFVec3fClass,NULL,NULL);
1160 jsval *argv = JS_ARGV(cx,vp);
1161 jsval rval = OBJECT_TO_JSVAL(obj);
1162 if (!MFVec3fConstrInternals(cx,obj,argc,argv,&rval)) {
return JS_FALSE; }
1163 JS_SET_RVAL(cx,vp,rval);
1166JSBool MFVec3fConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1168 JSObject *_arrayObj;
1177 if(argc == 1 && argv){
1180 if (!JS_ValueToObject(cx, argv[0], &_arrayObj)) {
1181 printf(
"JS_ValueToObject failed in MFVec3fConstr.\n");
1185 if(JS_IsArrayObject(cx, _arrayObj)){
1190 JS_GetArrayLength(cx,_arrayObj, &lengthp);
1197 if(SM_method() == 2){
1200 if((any = (
AnyNative*)AnyNativeNew(FIELDTYPE_MFVec3f,NULL,NULL)) == NULL){
1201 printf(
"AnyfNativeNew failed in MFVec3fConstr.\n");
1204 if (!JS_SetPrivateFw(cx, obj, any)) {
1205 printf(
"JS_SetPrivate failed in MFVec3fConstr.\n");
1209 newsize =
sizeof(
struct SFVec3f)*upper_power_of_two(argc);
1211 anyv->mfvec3f.p = MALLOC(
struct SFVec3f*,newsize);
1212 memset(anyv->mfvec3f.p,0,newsize);
1216 DEFINE_LENGTH(cx,obj,argc)
1222 #ifdef JSVRMLCLASSESVERBOSE
1223 printf(
"MFVec3fConstr: obj = %p, %u args\n", obj, argc);
1225 for (i = 0; i < argc; i++) {
1228 JS_GetElement(cx, _arrayObj, i, &vp);
1233 if (!JS_ValueToObject(cx, vp, &_obj)) {
1234 printf(
"JS_ValueToObject failed in MFVec3fConstr.\n");
1238 CHECK_CLASS(cx,_obj,NULL,__FUNCTION__,SFVec3fClass)
1242 if((any2 = (
AnyNative *)JS_GetPrivateFw(cx,_obj)) != NULL){
1245 if(any2->type == FIELDTYPE_SFVec3f || any2->type == FIELDTYPE_SFColor || any2->type == FIELDTYPE_SFColorRGBA){
1246 shallow_copy_field(FIELDTYPE_SFVec3f,any2->v,(
union anyVrml*)&anyv->mfvec3f.p[i]);
1247 anyv->mfvec3f.n = i+1;
1253 if (!JS_DefineElement(cx, obj, (jsint) i, vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
1254 printf(
"JS_DefineElement failed for arg %d in MFVec3fConstr.\n", i);
1259 *rval = OBJECT_TO_JSVAL(obj);
1264MFVec3fAssign(JSContext *cx, uintN argc, jsval *vp) {
1265 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1266 jsval *argv = JS_ARGV(cx,vp);
1268 if (!_standardMFAssign (cx, obj, argc, argv, &rval, &MFVec3fClass,FIELDTYPE_SFVec3f)) {
return JS_FALSE; }
1269 JS_SET_RVAL(cx,vp,rval);
1275static void _setmatrix (JSContext *cx, JSObject *obj,
double *matrix) {
1278 for (i=0; i<16; i++) {
1280 if (JS_NewNumberValue(cx, matrix[i],&val) == JS_FALSE) {
1281 printf (
"problem creating id matrix\n");
1285 if (!JS_SetElement(cx, obj, (jsint) i, &val)) {
1286 printf(
"JS_DefineElement failed for arg %u in VrmlMatrixSetTransform.\n", i);
1293static void _getmatrix (JSContext *cx, JSObject *obj,
double *fl) {
1300 if (!JS_GetProperty(cx, obj, MF_LENGTH_FIELD, &_length_val)) {
1301 printf(
"JS_GetProperty failed for \"%s\" in _getmatrix.\n", MF_LENGTH_FIELD);
1304 _length = JSVAL_TO_INT(_length_val);
1307 #ifdef JSVRMLCLASSESVERBOSE
1308 printf (
"_getmatrix, length %d\n",_length);
1312 if (_length>16) _length = 16;
1314 for (i = 0; i < _length; i++) {
1315 if (!JS_GetElement(cx, obj, (jsint) i, &val)) {
1316 printf(
"failed in get of copyElements index %d.\n", i);
1319 if (!JS_ValueToNumber(cx, val, &d)) {
1320 printf (
"this is not a mumber!\n");
1327 for (i=_length; i < 16; i++) {
1334VrmlMatrixToString(JSContext *cx, uintN argc, jsval *vp) {
1335 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1336 jsval *argv = JS_ARGV(cx,vp);
1341 if (!doMFToString(cx, obj,
"MFFloat", &rval)) {
return JS_FALSE; }
1342 JS_SET_RVAL(cx,vp,rval);
1347void _get4f(
double *ret,
double *mat,
int row) {
1348 if (row == 0) {ret[0]=MAT00;ret[1]=MAT01;ret[2]=MAT02;ret[3]=MAT03;}
1349 if (row == 1) {ret[0]=MAT10;ret[1]=MAT11;ret[2]=MAT12;ret[3]=MAT13;}
1350 if (row == 2) {ret[0]=MAT20;ret[1]=MAT21;ret[2]=MAT22;ret[3]=MAT23;}
1354void _set4f(
double len,
double *mat,
int row) {
1355 if (row == 0) {MAT00=MAT00/len;MAT01=MAT01/len;MAT02=MAT02/len;MAT03=MAT03/len;}
1356 if (row == 1) {MAT10=MAT10/len;MAT11=MAT11/len;MAT12=MAT12/len;MAT13=MAT13/len;}
1357 if (row == 2) {MAT20=MAT20/len;MAT21=MAT21/len;MAT22=MAT22/len;MAT23=MAT23/len;}
1361VrmlMatrixgetTransform(JSContext *cx, uintN argc, jsval *vp) {
1362 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1363 jsval *argv = JS_ARGV(cx,vp);
1365 JSObject *transObj = NULL;
1366 JSObject *rotObj = NULL;
1367 JSObject *scaleObj = NULL;
1374 double r0[4], r1[4], r2[4];
1378 _getmatrix(cx,obj,matrix);
1380 _get4f(r0,matrix,0);
1381 _get4f(r1,matrix,1);
1382 _get4f(r2,matrix,2);
1384 l0 = sqrt(r0[0]*r0[0] + r0[1]*r0[1] + r0[2]*r0[2] +r0[3]*r0[3]);
1385 l1 = sqrt(r1[0]*r1[0] + r1[1]*r1[1] + r1[2]*r1[2] +r1[3]*r1[3]);
1386 l2 = sqrt(r2[0]*r2[0] + r2[1]*r2[1] + r2[2]*r2[2] +r2[3]*r2[3]);
1389 if (!JS_ConvertArguments(cx, argc, argv,
"o", &transObj)) {
1390 printf (
"getTransform, invalid parameters\n");
1395 if (!JS_ConvertArguments(cx, argc, argv,
"o o", &transObj, &rotObj)) {
1396 printf (
"getTransform, invalid parameters\n");
1401 if (!JS_ConvertArguments(cx, argc, argv,
"o o o",
1402 &transObj,&rotObj,&scaleObj)) {
1403 printf (
"getTransform, invalid parameters\n");
1409 if (transObj!=NULL) {
1410 CHECK_CLASS(cx,transObj,NULL,__FUNCTION__,SFVec3fClass)
1412 if ((Vptr = (
SFVec3fNative *)JS_GetPrivateFw(cx, transObj)) == NULL) {
1413 printf(
"JS_GetPrivate failed.\n");
1416 (Vptr->v).c[0] = (
float) matrix[12];
1417 (Vptr->v).c[1] = (
float) matrix[13];
1418 (Vptr->v).c[2] = (
float) matrix[14];
1419 Vptr->valueChanged++;
1425 CHECK_CLASS(cx,rotObj,NULL,__FUNCTION__,SFRotationClass)
1428 printf(
"JS_GetPrivate failed.\n");
1433 _set4f(l0, matrix, 0);
1434 _set4f(l1, matrix, 1);
1435 _set4f(l2, matrix, 2);
1438 matrix_to_quaternion (&quat, matrix);
1439 #ifdef JSVRMLCLASSESVERBOSE
1440 printf (
"quaternion %f %f %f %f\n",quat.x,quat.y,quat.z,quat.w);
1444 quaternion_to_vrmlrot(&quat, &qu[0],&qu[1],&qu[2],&qu[3]);
1447 for (i=0; i<4; i++) (Rptr->v).c[i] = (float) qu[i];
1448 Rptr->valueChanged = 1;
1452 if (scaleObj != NULL) {
1453 CHECK_CLASS(cx,scaleObj,NULL,__FUNCTION__,SFVec3fClass)
1455 if ((Vptr = (
SFVec3fNative*)JS_GetPrivateFw(cx, scaleObj)) == NULL) {
1456 printf(
"JS_GetPrivate failed.\n");
1459 (Vptr->v).c[0] = (
float) l0;
1460 (Vptr->v).c[1] = (
float) l1;
1461 (Vptr->v).c[2] = (
float) l2;
1462 Vptr->valueChanged = 1;
1465 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(NULL));
1478VrmlMatrixsetTransform(JSContext *cx, uintN argc, jsval *vp) {
1479 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1480 jsval *argv = JS_ARGV(cx,vp);
1481 JSObject *transObj = NULL;
1482 JSObject *rotObj = NULL;
1483 JSObject *scaleObj = NULL;
1484 JSObject *scaleOObj = NULL;
1485 JSObject *centerObj = NULL;
1494 FW_GL_MATRIX_MODE(GL_MODELVIEW);
1495 FW_GL_PUSH_MATRIX();
1496 FW_GL_LOAD_IDENTITY();
1501 loadIdentityMatrix(matrix);
1504 if (!JS_InstanceOf(cx, obj, &VrmlMatrixClass, NULL)) {
1508 error = !JS_ConvertArguments(cx, argc, argv,
"o", &transObj);
1511 error = !JS_ConvertArguments(cx, argc, argv,
"o o", &transObj,
1515 error = !JS_ConvertArguments(cx, argc, argv,
"o o o",
1516 &transObj,&rotObj,&scaleObj);
1519 error = !JS_ConvertArguments(cx, argc, argv,
"o o o o",
1520 &transObj,&rotObj,&scaleObj,&scaleOObj);
1523 error = !JS_ConvertArguments(cx, argc, argv,
"o o o o o",
1524 &transObj,&rotObj,&scaleObj,&scaleOObj,¢erObj);
1526 if (argc > 5) { error = TRUE; }
1530 ConsoleMessage (
"setTransform: error in parameters");
1535 if (transObj != NULL)
1536 error = !JS_InstanceOf(cx, transObj, &SFVec3fClass, NULL);
1537 if (!error && (rotObj != NULL))
1538 error = !JS_InstanceOf(cx, rotObj, &SFRotationClass, NULL);
1539 if (!error && (scaleObj != NULL))
1540 error = !JS_InstanceOf(cx, scaleObj, &SFVec3fClass, NULL);
1541 if (!error && (scaleOObj != NULL))
1542 error = !JS_InstanceOf(cx, scaleOObj, &SFRotationClass, NULL);
1543 if (!error && centerObj != NULL)
1544 error = !JS_InstanceOf(cx, centerObj, &SFVec3fClass, NULL);
1547 ConsoleMessage (
"setTransform: at least one parameter incorrect type");
1555 error = (Vptr == NULL);
1558 matrix[12]=Vptr->v.c[0];
1559 matrix[13]=Vptr->v.c[1];
1560 matrix[14]=Vptr->v.c[2];
1564 if (!error && (rotObj != NULL)) {
1567 error = (Rptr == NULL);
1571 vrmlrot_to_quaternion(&quat, Rptr->v.c[0], Rptr->v.c[1], Rptr->v.c[2], Rptr->v.c[3]);
1574 quaternion_to_matrix (matrix, &quat);
1578 if (!error && (scaleObj != NULL)) {
1581 error = (Vptr == NULL);
1586 COPY_SFVEC3F_TO_POINT_XYZ (myScale,Vptr->v.c);
1587 scale_to_matrix(matrix, &myScale);
1593 _setmatrix (cx, obj, matrix);
1596 printf (
"calculated Matrix: \n\t%5.2f %5.2f %5.2f %5.2f\n\t%5.2f %5.2f %5.2f %5.2f\n\t%5.2f %5.2f %5.2f %5.2f\n\t%5.2f %5.2f %5.2f %5.2f\n",
1597 matrix[0], matrix[4], matrix[ 8], matrix[12],
1598 matrix[1], matrix[5], matrix[ 9], matrix[13],
1599 matrix[2], matrix[6], matrix[10], matrix[14],
1600 matrix[3], matrix[7], matrix[11], matrix[15]);
1601 glGetDoublev(GL_MODELVIEW,xxmat);
1602 printf (
"modelview Matrix: \n\t%5.2f %5.2f %5.2f %5.2f\n\t%5.2f %5.2f %5.2f %5.2f\n\t%5.2f %5.2f %5.2f %5.2f\n\t%5.2f %5.2f %5.2f %5.2f\n",
1603 xxmat[0], xxmat[4], xxmat[ 8], xxmat[12],
1604 xxmat[1], xxmat[5], xxmat[ 9], xxmat[13],
1605 xxmat[2], xxmat[6], xxmat[10], xxmat[14],
1606 xxmat[3], xxmat[7], xxmat[11], xxmat[15]);
1611 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(NULL));
1618VrmlMatrixinverse(JSContext *cx, uintN argc, jsval *vp) {
1619 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1620 jsval *argv = JS_ARGV(cx,vp);
1627 printf (
"VrmlMatrix, expect 0 parameters\n");
1630 _getmatrix (cx, obj,src);
1631 matinverseFULL (dest,src);
1633 retObj = JS_ConstructObjectFw(cx,&VrmlMatrixClass,NULL, NULL);
1635 _setmatrix(cx,retObj,dest);
1636 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(retObj));
1642VrmlMatrixtranspose(JSContext *cx, uintN argc, jsval *vp) {
1643 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1644 jsval *argv = JS_ARGV(cx,vp);
1651 printf (
"VrmlMatrix, expect 0 parameters\n");
1654 _getmatrix (cx, obj,src);
1655 mattranspose (dest,src);
1657 retObj = JS_ConstructObjectFw(cx,&VrmlMatrixClass,NULL, NULL);
1659 _setmatrix(cx,retObj,dest);
1660 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(retObj));
1667VrmlMatrixmultLeft(JSContext *cx, uintN argc, jsval *vp) {
1668 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1669 jsval *argv = JS_ARGV(cx,vp);
1671 JSObject *transObj = NULL;
1672 JSObject *retObj = NULL;
1679 error = !JS_ConvertArguments(cx, argc, argv,
"o", &transObj);
1680 }
else error = TRUE;
1682 if (!error)
if (!JS_InstanceOf(cx, transObj, &VrmlMatrixClass, NULL)) { error = TRUE;}
1685 ConsoleMessage (
"VrmlMatrixMultLeft, error in params");
1690 _getmatrix(cx,obj,matrix1);
1691 _getmatrix(cx,transObj,matrix2);
1692 matmultiplyFULL(matrix1,matrix1,matrix2);
1694 retObj = JS_ConstructObjectFw(cx,&VrmlMatrixClass,NULL, NULL);
1703 _setmatrix(cx,retObj,matrix1);
1704 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(retObj));
1710VrmlMatrixmultRight(JSContext *cx, uintN argc, jsval *vp) {
1711 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1712 jsval *argv = JS_ARGV(cx,vp);
1713 JSObject *transObj = NULL;
1714 JSObject *retObj = NULL;
1721 error = !JS_ConvertArguments(cx, argc, argv,
"o", &transObj);
1722 }
else error = TRUE;
1724 if (!error)
if (!JS_InstanceOf(cx, transObj, &VrmlMatrixClass, NULL)) { error = TRUE;}
1727 ConsoleMessage (
"VrmlMatrixMultRight, error in params");
1732 _getmatrix(cx,obj,matrix1);
1733 _getmatrix(cx,transObj,matrix2);
1734 matmultiplyFULL(matrix1,matrix2,matrix1);
1736 retObj = JS_ConstructObjectFw(cx,&VrmlMatrixClass,NULL, NULL);
1745 _setmatrix(cx,retObj,matrix1);
1746 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(retObj));
1753VrmlMatrixmultVecMatrix(JSContext *cx, uintN argc, jsval *vp) {
1754 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1755 jsval *argv = JS_ARGV(cx,vp);
1756 JSObject *transObj = NULL;
1757 JSObject *retObj = NULL;
1763 outp.x = outp.y = outp.z = 0.0;
1766 error = !JS_ConvertArguments(cx, argc, argv,
"o", &transObj);
1767 }
else error = TRUE;
1769 if (!error)
if (!JS_InstanceOf(cx, transObj, &SFVec3fClass, NULL)) { error = TRUE;}
1771 if ((Vptr = (
SFVec3fNative *)JS_GetPrivateFw(cx, transObj)) == NULL) {
1776 ConsoleMessage (
"VrmlMatrixMultVec, error in params");
1780 COPY_SFVEC3F_TO_POINT_XYZ(inp,Vptr->v.c);
1783 _getmatrix(cx,obj,matrix1);
1788 matrotate2v(matrix1, inp, outp);
1790 retObj = JS_ConstructObjectFw(cx,&SFVec3fClass,NULL, NULL);
1791 if ((Vptr = (
SFVec3fNative *)JS_GetPrivateFw(cx, retObj)) == NULL) {
1792 printf (
"error in new VrmlMatrix\n");
1796 COPY_POINT_XYZ_TO_SFVEC3F(Vptr->v.c,outp);
1797 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(retObj));
1804VrmlMatrixmultMatrixVec(JSContext *cx, uintN argc, jsval *vp) {
1805 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1806 jsval *argv = JS_ARGV(cx,vp);
1808 JSObject *transObj = NULL;
1809 JSObject *retObj = NULL;
1815 outp.x = outp.y = outp.z = 0.0;
1818 error = !JS_ConvertArguments(cx, argc, argv,
"o", &transObj);
1819 }
else error = TRUE;
1821 if (!error)
if (!JS_InstanceOf(cx, transObj, &SFVec3fClass, NULL)) { error = TRUE;}
1823 if ((Vptr = (
SFVec3fNative *)JS_GetPrivateFw(cx, transObj)) == NULL) {
1828 ConsoleMessage (
"VrmlMatrixMultVec, error in params");
1832 COPY_SFVEC3F_TO_POINT_XYZ(inp,Vptr->v.c);
1835 _getmatrix(cx,obj,matrix1);
1838 mattranspose (matrix1, matrix1);
1840 matrotate2v(matrix1, inp, outp);
1842 retObj = JS_ConstructObjectFw(cx,&SFVec3fClass,NULL, NULL);
1843 if ((Vptr = (
SFVec3fNative *)JS_GetPrivateFw(cx, retObj)) == NULL) {
1844 printf (
"error in new VrmlMatrix\n");
1848 COPY_POINT_XYZ_TO_SFVEC3F(Vptr->v.c,outp);
1849 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(retObj));
1856VrmlMatrixAssign(JSContext *cx, uintN argc, jsval *vp) {
1857 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1858 jsval *argv = JS_ARGV(cx,vp);
1860 if (!_standardMFAssign (cx, obj, argc, argv, &rval, &VrmlMatrixClass,FIELDTYPE_FreeWRLPTR)) {
return JS_FALSE; }
1861 JS_SET_RVAL(cx,vp,rval);
1866VrmlMatrixConstr(JSContext *cx, uintN argc, jsval *vp) {
1867 JSObject *obj = JS_NewObject(cx,&VrmlMatrixClass,NULL,NULL);
1868 jsval *argv = JS_ARGV(cx,vp);
1869 jsval rval = OBJECT_TO_JSVAL(obj);
1870 if (!VrmlMatrixConstrInternals(cx,obj,argc,argv,&rval)) {
return JS_FALSE; }
1871 JS_SET_RVAL(cx,vp,rval);
1874JSBool VrmlMatrixConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1876 JSObject *_arrayObj;
1884 if(argc == 1 && argv){
1887 if (!JS_ValueToObject(cx, argv[0], &_arrayObj)) {
1888 printf(
"JS_ValueToObject failed in MFVec3fConstr.\n");
1892 if(JS_IsArrayObject(cx, _arrayObj)){
1897 JS_GetArrayLength(cx,_arrayObj, &lengthp);
1902 if ((argc != 16) && (argc != 0)) {
1903 printf (
"VrmlMatrixConstr - require either 16 or no values\n");
1907 DEFINE_LENGTH(cx,obj,16)
1910 for (i = 0; i < 16; i++) {
1913 JS_GetElement(cx, _arrayObj, i, &vp);
1918 if (!JS_ValueToNumber(cx, vp, &_d)) {
1920 "JS_ValueToNumber failed in VrmlMatrixConstr.\n");
1924 if (!JS_DefineElement(cx, obj, (jsint) i, vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
1925 printf(
"JS_DefineElement failed for arg %u in VrmlMatrixConstr.\n", i);
1932 loadIdentityMatrix(matrix);
1933 _setmatrix (cx, obj, matrix);
1935 *rval = OBJECT_TO_JSVAL(obj);
1940VrmlMatrixAddProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
1941 JSObject *obj = *hobj.address();
1942 jsid
id = *hiid.address();
1943 jsval *vp = hvp.address();
1944 return doMFAddProperty(cx, obj,
id, vp,
"VrmlMatrixAddProperty");
1948VrmlMatrixGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
1949 JSObject *obj = *hobj.address();
1950 jsid iid = *hiid.address();
1951 jsval *vp = hvp.address();
1953 int32 _length, _index;
1958 if (!JS_IdToValue(cx,iid,&
id)) {
1959 printf(
"JS_IdToValue failed in VrmlMatrixGetproperty.\n");
1964 if (!JS_GetProperty(cx, obj, MF_LENGTH_FIELD, &_length_val)) {
1965 printf(
"JS_GetProperty failed for \"%s\" in VrmlMatrixGetProperty.\n", MF_LENGTH_FIELD);
1968 _length = JSVAL_TO_INT(_length_val);
1988 if (JSVAL_IS_INT(
id)) {
1989 _index = JSVAL_TO_INT(
id);
1991 if (_index >= _length) {
1992 JS_NewNumberValue(cx,0.0,vp);
1993 if (!JS_DefineElement(cx, obj, (jsint) _index, *vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
1994 printf(
"JS_DefineElement failed in VrmlMatrixGetProperty.\n");
1998 if (!JS_LookupElement(cx, obj, _index, vp)) {
2000 "JS_LookupElement failed in VrmlMatrixGetProperty.\n");
2003 if (JSVAL_IS_NULL(*vp)) {
2004 printf(
"VrmlMatrixGetProperty: obj = %p, jsval = %d does not exist!\n",
2009 }
else if (
id.isObject()) {
2016VrmlMatrixSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
2017 JSObject *obj = *hobj.address();
2018 jsid
id = *hiid.address();
2019 jsval *vp = hvp.address();
2021 return doMFSetProperty(cx, obj,
id, vp,1000);
2026MFRotationAddProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
2027 JSObject *obj = *hobj.address();
2028 jsid
id = *hiid.address();
2029 jsval *vp = hvp.address();
2031 return doMFAddProperty(cx, obj,
id, vp,
"MFRotationAddProperty");
2035MFRotationGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
2036 JSObject *obj = *hobj.address();
2037 jsid
id = *hiid.address();
2038 jsval *vp = hvp.address();
2040 return _standardMFGetProperty(cx, obj,
id, vp,
2041 "_FreeWRL_Internal = new SFRotation()",FIELDTYPE_MFRotation);
2045MFRotationSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
2046 JSObject *obj = *hobj.address();
2047 jsid
id = *hiid.address();
2048 jsval *vp = hvp.address();
2050 return doMFSetProperty(cx, obj,
id, vp,FIELDTYPE_MFRotation);
2054MFRotationToString(JSContext *cx, uintN argc, jsval *vp) {
2055 JSObject *obj = JS_THIS_OBJECT(cx,vp);
2056 jsval *argv = JS_ARGV(cx,vp);
2061 if (!doMFToString(cx, obj,
"MFRotation", &rval)) {
return JS_FALSE; }
2062 JS_SET_RVAL(cx,vp,rval);
2068MFRotationConstr(JSContext *cx, uintN argc, jsval *vp) {
2069 JSObject *obj = JS_NewObject(cx,&MFRotationClass,NULL,NULL);
2070 jsval *argv = JS_ARGV(cx,vp);
2071 jsval rval = OBJECT_TO_JSVAL(obj);
2072 if (!MFRotationConstrInternals(cx,obj,argc,argv,&rval)) {
return JS_FALSE; }
2073 JS_SET_RVAL(cx,vp,rval);
2076JSBool MFRotationConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
2078 JSObject *_arrayObj;
2087 if(argc == 1 && argv){
2090 if (!JS_ValueToObject(cx, argv[0], &_arrayObj)) {
2091 printf(
"JS_ValueToObject failed in MFVec3fConstr.\n");
2095 if(JS_IsArrayObject(cx, _arrayObj)){
2100 JS_GetArrayLength(cx,_arrayObj, &lengthp);
2105 if(SM_method() == 2){
2108 if((any = (
AnyNative*)AnyNativeNew(FIELDTYPE_MFRotation,NULL,NULL)) == NULL){
2109 printf(
"AnyfNativeNew failed in MFRotationConstr.\n");
2112 if (!JS_SetPrivateFw(cx, obj, any)) {
2113 printf(
"JS_SetPrivate failed in MFRotationConstr.\n");
2117 newsize =
sizeof(
struct SFRotation)*upper_power_of_two(argc);
2119 anyv->mfrotation.p = MALLOC(
struct SFRotation*,newsize);
2120 memset(anyv->mfrotation.p,0,newsize);
2124 DEFINE_LENGTH(cx,obj,argc)
2131 #ifdef JSVRMLCLASSESVERBOSE
2132 printf(
"MFRotationConstr: obj = %p, %u args\n", obj, argc);
2134 for (i = 0; i < argc; i++) {
2137 JS_GetElement(cx, _arrayObj, i, &vp);
2142 if (!JS_ValueToObject(cx, vp, &_obj)) {
2144 "JS_ValueToObject failed in MFRotationConstr.\n");
2148 CHECK_CLASS(cx,_obj,NULL,__FUNCTION__,SFRotationClass)
2151 if((any2 = (
AnyNative *)JS_GetPrivateFw(cx,_obj)) != NULL){
2152 if(any2->type == FIELDTYPE_SFRotation ){
2153 shallow_copy_field(FIELDTYPE_SFRotation,any2->v,(
union anyVrml*)&anyv->mfrotation.p[i]);
2154 anyv->mfrotation.n = i+1;
2159 if (!JS_DefineElement(cx, obj, (jsint) i, vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
2160 printf(
"JS_DefineElement failed for arg %d in MFRotationConstr.\n", i);
2165 *rval = OBJECT_TO_JSVAL(obj);
2170MFRotationAssign(JSContext *cx, uintN argc, jsval *vp) {
2171 JSObject *obj = JS_THIS_OBJECT(cx,vp);
2172 jsval *argv = JS_ARGV(cx,vp);
2175 if (!_standardMFAssign (cx, obj, argc, argv, &rval, &MFRotationClass,FIELDTYPE_SFRotation)) {
return JS_FALSE; }
2176 JS_SET_RVAL(cx,vp,rval);
2183MFStringAddProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
2184 JSObject *obj = *hobj.address();
2185 jsid iid = *hiid.address();
2186 jsval *vp = hvp.address();
2188 if (!JS_IdToValue(cx,iid,&
id)) {
2189 printf(
"JS_IdToValue failed in MFStringAddProperty\n");
2194 #ifdef JSVRMLCLASSESVERBOSE
2195 printf(
"MFStringAddProperty: vp = %p\n", obj);
2196 if (JSVAL_IS_STRING(*vp)==TRUE) {
2197 printf(
" is a common string :%s:\n",
2199 JS_GetStringBytes(JS_ValueToString(cx, *vp)));
2201 JS_EncodeString(cx,JS_ValueToString(cx, *vp)));
2204 if (JSVAL_IS_OBJECT(*vp)==TRUE) {
2205 printf (
" parameter is an object\n");
2207 if (JSVAL_IS_PRIMITIVE(*vp)==TRUE) {
2208 printf (
" parameter is a primitive\n");
2210 if (JSVAL_IS_NULL(*vp)) { printf (
" - its a NULL\n");}
2211 if (JSVAL_IS_INT(*vp)) { printf (
" - its a INT %d\n",JSVAL_TO_INT(*vp));}
2213 printf(
"MFStringAddProperty: id = %p\n", obj);
2214 if (JSVAL_IS_STRING(
id)==TRUE) {
2215 printf(
" is a common string :%s:\n",
2217 JS_GetStringBytes(JS_ValueToString(cx,
id)));
2219 JS_EncodeString(cx,JS_ValueToString(cx,
id)));
2222 if (JSVAL_IS_OBJECT(
id)==TRUE) {
2223 printf (
" parameter is an object\n");
2225 if (JSVAL_IS_PRIMITIVE(
id)==TRUE) {
2226 printf (
" parameter is a primitive\n");
2228 if (JSVAL_IS_NULL(
id)) { printf (
" - its a NULL\n");}
2229 if (JSVAL_IS_INT(
id)) { printf (
" - its a INT %d\n",JSVAL_TO_INT(
id));}
2235 if (JSVAL_IS_STRING(*vp)) {
2236 if (!doMFStringUnquote(cx, vp)) {
2238 "doMFStringUnquote failed in MFStringAddProperty.\n");
2242 return doMFAddProperty(cx, obj, iid, vp,
"MFStringAddProperty");
2248MFStringGetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JS::MutableHandle<JS::Value> hvp){
2249 JSObject *obj = *hobj.address();
2250 jsid iid = *hiid.address();
2251 jsval *vp = hvp.address();
2255 int32 _length, _index;
2259 if (!JS_IdToValue(cx,iid,&
id)) {
2260 printf(
"JS_IdToValue failed in MFStringGetProperty\n");
2265 return _standardMFGetProperty(cx, obj, iid, vp,
2266 "_FreeWRL_Internal = new SFString()",FIELDTYPE_MFString);
2270 #ifdef JSVRMLCLASSESVERBOSE
2271 printf(
"MFStringGetProperty: obj = %p\n", obj);
2274 if (!JS_GetProperty(cx, obj, MF_LENGTH_FIELD, &_length_val)) {
2275 printf(
"JS_GetProperty failed for \"%s\" in MFStringGetProperty.\n", MF_LENGTH_FIELD);
2278 _length = JSVAL_TO_INT(_length_val);
2280 if (JSVAL_IS_INT(
id)) {
2281 _index = JSVAL_TO_INT(
id);
2283 if (_index >= _length) {
2284 _str = JS_NewStringCopyZ(cx,
"");
2285 *vp = STRING_TO_JSVAL(_str);
2286 if (!JS_DefineElement(cx, obj, (jsint) _index, *vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
2287 printf(
"JS_DefineElement failed in MFStringGetProperty.\n");
2291 if (!JS_LookupElement(cx, obj, _index, vp)) {
2292 printf(
"JS_LookupElement failed in MFStringGetProperty.\n");
2295 if (JSVAL_IS_NULL(*vp)) {
2298 _str = JS_NewStringCopyZ(cx,
"NULL");
2299 *vp = STRING_TO_JSVAL(_str);
2300 if (!JS_DefineElement(cx, obj, (jsint) _index, *vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
2301 printf(
"JS_DefineElement failed in MFStringGetProperty.\n");
2312MFStringSetProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool strict, JS::MutableHandle<JS::Value> hvp){
2313 JSObject *obj = *hobj.address();
2314 jsid
id = *hiid.address();
2315 jsval *vp = hvp.address();
2319 #ifdef JSVRMLCLASSESVERBOSE
2320 printf(
"MFStringSetProperty: obj = %p id %d jsval %u\n", obj,
id, (
unsigned int)*vp);
2322printf (
"MFStringSetProperty, setting vp of type...\n");
2323 if (JSVAL_IS_OBJECT(*vp)) { printf (
" - MFStringSetProperty, vp is a OBJECT\n");}
2324 if (JSVAL_IS_PRIMITIVE(*vp)) { printf (
" - MFStringSetProperty, vp is a PRIMITIVE\n");}
2325 if (JSVAL_IS_NULL(*vp)) { printf (
" - MFStringSetProperty, vp is a NULL\n");}
2326 if (JSVAL_IS_STRING(*vp)) { printf (
" - MFStringSetProperty, vp is a STRING\n");}
2327 if (JSVAL_IS_INT(*vp)) { printf (
" - MFStringSetProperty, vp is a INT %d\n",JSVAL_TO_INT(*vp));}
2333 if (JSVAL_IS_STRING(*vp)) {
2334 if (!doMFStringUnquote(cx, vp)) {
2336 "doMFStringUnquote failed in MFStringSetProperty.\n");
2340 rv = doMFSetProperty(cx, obj,
id, vp,FIELDTYPE_MFString);
2341 #ifdef JSVRMLCLASSESVERBOSE
2342 printf (
"returning from MFStringSetProperty\n");
2350MFStringToString(JSContext *cx, uintN argc, jsval *vp) {
2351 JSObject *obj = JS_THIS_OBJECT(cx,vp);
2352 jsval *argv = JS_ARGV(cx,vp);
2357 #ifdef JSVRMLCLASSESVERBOSE
2358 printf(
"MFStringToString: obj = %p, %u args\n", obj, argc);
2362 if (!doMFToString(cx, obj,
"MFString", &rval)) {
return JS_FALSE; }
2363 JS_SET_RVAL(cx,vp,rval);
2370MFStringConstr(JSContext *cx, uintN argc, jsval *vp) {
2371 JSObject *obj = JS_NewObject(cx,&MFStringClass,NULL,NULL);
2372 jsval *argv = JS_ARGV(cx,vp);
2373 jsval rval = OBJECT_TO_JSVAL(obj);
2374 if (!MFStringConstrInternals(cx,obj,argc,argv,&rval)) {
return JS_FALSE; }
2375 JS_SET_RVAL(cx,vp,rval);
2378JSBool MFStringConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
2380 JSObject *_arrayObj;
2386 #ifdef JSVRMLCLASSESVERBOSE
2388 printf(
"MFStringConstr: cx %p, obj %p args %d rval %p parent %p... ", cx, obj, argc, rval, JS_GetParent(cx, obj));
2394 if(argc == 1 && argv){
2397 if (!JS_ValueToObject(cx, argv[0], &_arrayObj)) {
2398 printf(
"JS_ValueToObject failed in MFVec3fConstr.\n");
2402 if(JS_IsArrayObject(cx, _arrayObj)){
2407 JS_GetArrayLength(cx,_arrayObj, &lengthp);
2412 if(SM_method() == 2){
2415 if((any = (
AnyNative*)AnyNativeNew(FIELDTYPE_MFString,NULL,NULL)) == NULL){
2416 printf(
"AnyfNativeNew failed in MFStringConstr.\n");
2419 if (!JS_SetPrivateFw(cx, obj, any)) {
2420 printf(
"JS_SetPrivate failed in MFStringConstr.\n");
2424 newsize =
sizeof(
struct Uni_String*)*upper_power_of_two(argc);
2426 anyv->mfstring.p = MALLOC(
struct Uni_String**,newsize);
2427 memset(anyv->mfstring.p,0,newsize);
2431 DEFINE_LENGTH(cx,obj,argc)
2432 DEFINE_MF_ECMA_HAS_CHANGED
2439 for (i = 0; i < argc; i++) {
2442 JS_GetElement(cx, _arrayObj, i, &vp);
2447 #ifdef JSVRMLCLASSESVERBOSE
2448 printf (
"argv %d is a ...",i);
2450 if (JSVAL_IS_STRING(argv[i])==TRUE) {
2451 printf (
" Common String, is");
2452 _str = JS_ValueToString(cx, argv[i]);
2454 printf (
" %s",JS_GetStringBytes(_str));
2456 printf (
" %s",JS_EncodeString(cx,_str));
2461 if (JSVAL_IS_OBJECT(argv[i])==TRUE) {
2462 printf (
" is an object");
2464 if (JSVAL_IS_PRIMITIVE(argv[i])==TRUE) {
2465 printf (
" is a primitive");
2468 if ((_str = JS_ValueToString(cx, argv[i])) == NULL) {
2469 printf(
"JS_ValueToString failed in MFStringConstr.");
2476 char *cstring = NULL;
2477 if (JSVAL_IS_STRING(vp)==TRUE) {
2481 _str = JS_ValueToString(cx, vp);
2482 cstring = JS_EncodeString(cx,_str);
2492 us->strptr = cstring;
2493 us->len = strlen(cstring);
2495 anyv->mfstring.p[i] = us;
2496 anyv->mfstring.n = i+1;
2500 if (!JS_DefineElement(cx, obj, (jsint) i, vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
2501 printf(
"JS_DefineElement failed for arg %d in MFStringConstr.\n", i);
2506 *rval = OBJECT_TO_JSVAL(obj);
2508 #ifdef JSVRMLCLASSESVERBOSE
2509 printf (
"finished MFStringConstr\n");
2516MFStringAssign(JSContext *cx, uintN argc, jsval *vp) {
2517 JSObject *obj = JS_THIS_OBJECT(cx,vp);
2518 jsval *argv = JS_ARGV(cx,vp);
2522 #ifdef JSVRMLCLASSESVERBOSE
2523 printf(
"MFStringAssign: obj = %p args %d... ", obj, argc);
2525 if(SM_method() != 2){
2526 SET_MF_ECMA_HAS_CHANGED
2529 if (!_standardMFAssign (cx, obj, argc, argv, &rval, &MFStringClass,FIELDTYPE_SFString)) {
return JS_FALSE; }
2530 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(obj));
2536JSBool MFStringDeleteProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid, JSBool *succeeded){
2537 JSObject *obj = *hobj.address();
2538 jsid iid = *hiid.address();
2540 #ifdef JSVRMLCLASSESVERBOSE
2541 printf (
"MFStringDeleteProperty\n");
2546MFStringEnumerateProperty(JSContext *cx, JS::Handle<JSObject*> hobj) {
2547 JSObject *obj = *hobj.address();
2549 #ifdef JSVRMLCLASSESVERBOSE
2550 printf (
"MFStringEnumerateProperty\n");
2555JSBool MFStringResolveProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JS::Handle<jsid> hiid){
2556 JSObject *obj = *hobj.address();
2557 jsid
id = *hiid.address();
2559 #ifdef JSVRMLCLASSESVERBOSE
2560 printf (
"MFStringResolveProperty\n");
2564JSBool MFStringConvertProperty(JSContext *cx, JS::Handle<JSObject*> hobj, JSType type, JS::MutableHandle<JS::Value> hvp) {
2565 JSObject *obj = *hobj.address();
2566 jsval *vp = hvp.address();
2569 #ifdef JSVRMLCLASSESVERBOSE
2570 printf (
"MFStringConvertProperty\n");