|
From: <br...@us...> - 2011-02-02 04:20:38
|
Revision: 4218
http://openvrml.svn.sourceforge.net/openvrml/?rev=4218&view=rev
Author: braden
Date: 2011-02-02 04:20:25 +0000 (Wed, 02 Feb 2011)
Log Message:
-----------
Newer SpiderMonkey (XULRunner 2.0) changes the JSNative function signature and the means of accessing argv, the this JSObject, and the returned jsval.
Modified Paths:
--------------
trunk/ChangeLog
trunk/configure.ac
trunk/src/script/javascript.cpp
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2011-01-24 05:23:27 UTC (rev 4217)
+++ trunk/ChangeLog 2011-02-02 04:20:25 UTC (rev 4218)
@@ -1,3 +1,12 @@
+2011-02-01 Braden McDaniel <br...@en...>
+
+ Newer SpiderMonkey (XULRunner 2.0) changes the JSNative function
+ signature and the means of accessing argv, the "this" JSObject,
+ and the returned jsval.
+
+ * configure.ac
+ * src/script/javascript.cpp
+
2011-01-24 Braden McDaniel <br...@en...>
Newer SpiderMonkey (XULRunner 2.0) removes the fifth
Modified: trunk/configure.ac
===================================================================
--- trunk/configure.ac 2011-01-24 05:23:27 UTC (rev 4217)
+++ trunk/configure.ac 2011-02-02 04:20:25 UTC (rev 4218)
@@ -226,6 +226,26 @@
[Defined if SpiderMonkey uses type-specific add/remove root functions])])
#
+# XULRunner 2.0 changes the type of JSNative to match that of JSFastNative.
+#
+AC_CACHE_CHECK([whether JSNative has the JSFastNative signature],
+[ov_cv_fast_jsnative],
+[ov_cv_fast_jsnative=no
+ov_save_CPPFLAGS=$CPPFLAGS
+CPPFLAGS="$JS_CFLAGS $CPPFLAGS"
+AC_LANG_PUSH([C++])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+[[#include <jsapi.h>]],
+[[JSBool (*f)(JSContext *, uintN, jsval *); JSNative g = f;]])],
+[ov_cv_fast_jsnative=yes])
+AC_LANG_POP([C++])
+CPPFLAGS=$ov_save_CPPFLAGS
+])
+AS_IF([test X$ov_cv_fast_jsnative = Xyes],
+ [AC_DEFINE([OPENVRML_FAST_JSNATIVE], [1],
+ [Defined if JSNative is the same as JSFastNative])])
+
+#
# openvrml-xembed and openvrml-player both use GOption, which was
# introduced in GLib 2.6.
#
Modified: trunk/src/script/javascript.cpp
===================================================================
--- trunk/src/script/javascript.cpp 2011-01-24 05:23:27 UTC (rev 4217)
+++ trunk/src/script/javascript.cpp 2011-02-02 04:20:25 UTC (rev 4218)
@@ -91,42 +91,91 @@
# endif
}
+# ifdef OPENVRML_FAST_JSNATIVE
+# define OPENVRML_DECLARE_JSNATIVE(name) \
+ JSBool (name)(JSContext * cx, uintN argc, jsval * vp)
+# else
+# define OPENVRML_DECLARE_JSNATIVE(name) \
+ JSBool (name)(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, \
+ jsval * rval)
+# endif
+
+# ifdef OPENVRML_FAST_JSNATIVE
+# define OPENVRML_DECLARE_MEMBER_JSNATIVE(class_name, name) \
+ JSBool class_name::name(JSContext * cx, uintN argc, jsval * vp)
+# else
+# define OPENVRML_DECLARE_MEMBER_JSNATIVE(class_name, name) \
+ JSBool class_name::name(JSContext * cx, JSObject * obj, \
+ uintN argc, jsval * argv, \
+ jsval * rval)
+# endif
+
+# ifdef OPENVRML_FAST_JSNATIVE
+# define OPENVRML_DEFINE_JSNATIVE(name) \
+ JSBool (name)(JSContext * const cx, const uintN argc, jsval * const vp)
+# else
+# define OPENVRML_DEFINE_JSNATIVE(name) \
+ JSBool (name)(JSContext * const cx, JSObject * obj, \
+ const uintN argc, jsval * const argv, jsval * const rval)
+# endif
+
+# ifdef OPENVRML_FAST_JSNATIVE
+# define OPENVRML_DEFINE_MEMBER_JSNATIVE(class_name, name) \
+ JSBool class_name::name(JSContext * const cx, const uintN argc, \
+ jsval * const vp)
+# else
+# define OPENVRML_DEFINE_MEMBER_JSNATIVE(class_name, name) \
+ JSBool class_name::name(JSContext * const cx, JSObject * obj, \
+ const uintN argc, jsval * const argv, \
+ jsval * const rval)
+# endif
+
+# ifdef OPENVRML_FAST_JSNATIVE
+# define OPENVRML_JS_ARGV(cx, vp) JS_ARGV(cx, vp)
+# else
+# define OPENVRML_JS_ARGV(cx, vp) argv
+# endif
+
+# ifdef OPENVRML_FAST_JSNATIVE
+# define OPENVRML_JS_SET_RVAL(cx, vp, value) JS_SET_RVAL((cx), (vp), (value))
+# else
+# define OPENVRML_JS_SET_RVAL(cx, vp, value) *rval = (value)
+# endif
+
+# ifdef OPENVRML_FAST_JSNATIVE
+# define OPENVRML_JS_RVAL(cx, vp) JS_RVAL((cx), (vp))
+# else
+# define OPENVRML_JS_RVAL(cx, vp) *rval
+# endif
+
+# ifdef OPENVRML_FAST_JSNATIVE
+# define OPENVRML_JS_THIS_OBJECT(cx, vp) JS_THIS_OBJECT((cx), (vp))
+# else
+# define OPENVRML_JS_THIS_OBJECT(cx, vp) obj
+# endif
+
+# ifdef OPENVRML_FAST_JSNATIVE
+# define OPENVRML_JS_IS_CONSTRUCTING(cx, vp) JS_IsConstructing(cx, vp)
+# else
+# define OPENVRML_JS_IS_CONSTRUCTING(cx, vp) JS_IsConstructing(cx)
+# endif
+
class SFNode;
class MFNode;
namespace Browser {
- OPENVRML_JAVASCRIPT_LOCAL
- JSBool createVrmlFromURL(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv,
- jsval * rval)
- OPENVRML_NOTHROW;
- OPENVRML_JAVASCRIPT_LOCAL
- JSBool addRoute(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- OPENVRML_JAVASCRIPT_LOCAL
- JSBool deleteRoute(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv,
- jsval * rval)
- OPENVRML_NOTHROW;
+ OPENVRML_JAVASCRIPT_LOCAL OPENVRML_DECLARE_JSNATIVE(createVrmlFromURL);
+ OPENVRML_JAVASCRIPT_LOCAL OPENVRML_DECLARE_JSNATIVE(addRoute);
+ OPENVRML_JAVASCRIPT_LOCAL OPENVRML_DECLARE_JSNATIVE(deleteRoute);
}
class OPENVRML_JAVASCRIPT_LOCAL script : public openvrml::script {
friend class SFNode;
friend class MFNode;
- friend JSBool Browser::createVrmlFromURL(JSContext * cx,
- JSObject * obj,
- uintN argc, jsval * argv,
- jsval * rval)
- OPENVRML_NOTHROW;
- friend JSBool Browser::addRoute(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- friend JSBool Browser::deleteRoute(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv,
- jsval * rval)
- OPENVRML_NOTHROW;
+ friend OPENVRML_DECLARE_MEMBER_JSNATIVE(Browser, createVrmlFromURL);
+ friend OPENVRML_DECLARE_MEMBER_JSNATIVE(Browser, addRoute);
+ friend OPENVRML_DECLARE_MEMBER_JSNATIVE(Browser, deleteRoute);
static JSRuntime * rt;
static size_t nInstances;
@@ -252,7 +301,7 @@
0, // mark
0 // spare
};
- JSBool print(JSContext *, JSObject *, uintN, jsval *, jsval *);
+ OPENVRML_DECLARE_JSNATIVE(print);
}
namespace Browser {
@@ -276,78 +325,18 @@
0, // mark
0 // spare
};
- OPENVRML_JAVASCRIPT_LOCAL JSBool getName(JSContext * cx,
- JSObject * obj,
- uintN argc,
- jsval * argv,
- jsval * rval)
- OPENVRML_NOTHROW;
- OPENVRML_JAVASCRIPT_LOCAL JSBool getVersion(JSContext * cx,
- JSObject * obj,
- uintN argc,
- jsval * argv,
- jsval * rval)
- OPENVRML_NOTHROW;
- OPENVRML_JAVASCRIPT_LOCAL JSBool getCurrentSpeed(JSContext * cx,
- JSObject * obj,
- uintN argc,
- jsval * argv,
- jsval * rval)
- OPENVRML_NOTHROW;
- OPENVRML_JAVASCRIPT_LOCAL JSBool getCurrentFrameRate(JSContext * cx,
- JSObject * obj,
- uintN argc,
- jsval * argv,
- jsval * rval)
- OPENVRML_NOTHROW;
- OPENVRML_JAVASCRIPT_LOCAL JSBool getWorldURL(JSContext * cx,
- JSObject * obj,
- uintN argc,
- jsval * argv,
- jsval * rval)
- OPENVRML_NOTHROW;
- OPENVRML_JAVASCRIPT_LOCAL JSBool replaceWorld(JSContext * cx,
- JSObject * obj,
- uintN argc,
- jsval * argv,
- jsval * rval)
- OPENVRML_NOTHROW;
- OPENVRML_JAVASCRIPT_LOCAL JSBool createVrmlFromString(JSContext * cx,
- JSObject * obj,
- uintN argc,
- jsval * argv,
- jsval * rval)
- OPENVRML_NOTHROW;
- OPENVRML_JAVASCRIPT_LOCAL JSBool createVrmlFromURL(JSContext * cx,
- JSObject * obj,
- uintN argc,
- jsval * argv,
- jsval * rval)
- OPENVRML_NOTHROW;
- OPENVRML_JAVASCRIPT_LOCAL JSBool addRoute(JSContext * cx,
- JSObject * obj,
- uintN argc,
- jsval * argv,
- jsval * rval)
- OPENVRML_NOTHROW;
- OPENVRML_JAVASCRIPT_LOCAL JSBool deleteRoute(JSContext * cx,
- JSObject * obj,
- uintN argc,
- jsval * argv,
- jsval * rval)
- OPENVRML_NOTHROW;
- OPENVRML_JAVASCRIPT_LOCAL JSBool loadURL(JSContext * cx,
- JSObject * obj,
- uintN argc,
- jsval * argv,
- jsval * rval)
- OPENVRML_NOTHROW;
- OPENVRML_JAVASCRIPT_LOCAL JSBool setDescription(JSContext * cx,
- JSObject * obj,
- uintN argc,
- jsval * argv,
- jsval * rval)
- OPENVRML_NOTHROW;
+ OPENVRML_JAVASCRIPT_LOCAL OPENVRML_DECLARE_JSNATIVE(getName);
+ OPENVRML_JAVASCRIPT_LOCAL OPENVRML_DECLARE_JSNATIVE(getVersion);
+ OPENVRML_JAVASCRIPT_LOCAL OPENVRML_DECLARE_JSNATIVE(getCurrentSpeed);
+ OPENVRML_JAVASCRIPT_LOCAL OPENVRML_DECLARE_JSNATIVE(getCurrentFrameRate);
+ OPENVRML_JAVASCRIPT_LOCAL OPENVRML_DECLARE_JSNATIVE(getWorldURL);
+ OPENVRML_JAVASCRIPT_LOCAL OPENVRML_DECLARE_JSNATIVE(replaceWorld);
+ OPENVRML_JAVASCRIPT_LOCAL OPENVRML_DECLARE_JSNATIVE(createVrmlFromString);
+ OPENVRML_JAVASCRIPT_LOCAL OPENVRML_DECLARE_JSNATIVE(createVrmlFromURL);
+ OPENVRML_JAVASCRIPT_LOCAL OPENVRML_DECLARE_JSNATIVE(addRoute);
+ OPENVRML_JAVASCRIPT_LOCAL OPENVRML_DECLARE_JSNATIVE(deleteRoute);
+ OPENVRML_JAVASCRIPT_LOCAL OPENVRML_DECLARE_JSNATIVE(loadURL);
+ OPENVRML_JAVASCRIPT_LOCAL OPENVRML_DECLARE_JSNATIVE(setDescription);
}
//
@@ -385,9 +374,7 @@
protected:
static void finalize(JSContext * cx, JSObject * obj) OPENVRML_NOTHROW;
- static JSBool toString(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSNATIVE(toString);
private:
sfield();
};
@@ -406,9 +393,7 @@
OPENVRML_THROW2(bad_conversion, std::bad_alloc);
private:
- static JSBool construct(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSNATIVE(construct);
static JSBool initObject(JSContext * cx, JSObject * obj,
const jsdouble (&rgb)[3])
OPENVRML_NOTHROW;
@@ -418,12 +403,8 @@
static JSBool setProperty(JSContext * cx, JSObject * obj,
jspropertyop_id id, jsval * vp)
OPENVRML_NOTHROW;
- static JSBool setHSV(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool getHSV(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSNATIVE(setHSV);
+ static OPENVRML_DECLARE_JSNATIVE(getHSV);
};
class OPENVRML_JAVASCRIPT_LOCAL SFImage : public sfield {
@@ -440,9 +421,7 @@
OPENVRML_THROW2(bad_conversion, std::bad_alloc);
private:
- static JSBool construct(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSNATIVE(construct);
static JSBool initObject(JSContext * cx, JSObject * obj,
uint32 x, uint32 y, uint32 comp,
JSObject * pixels_obj)
@@ -469,9 +448,7 @@
static std::auto_ptr<openvrml::sfnode>
createFromJSObject(JSContext * cx, JSObject * obj)
OPENVRML_THROW2(bad_conversion, std::bad_alloc);
- static JSBool construct(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval *)
- OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSNATIVE(construct);
static JSBool initObject(JSContext * cx, JSObject * obj,
JSString * vrmlstring)
OPENVRML_NOTHROW;
@@ -497,9 +474,7 @@
OPENVRML_THROW2(bad_conversion, std::bad_alloc);
private:
- static JSBool construct(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval *)
- OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSNATIVE(construct);
static JSBool initObject(JSContext * cx, JSObject * obj,
const jsdouble (&rot)[4])
OPENVRML_NOTHROW;
@@ -509,24 +484,12 @@
static JSBool setProperty(JSContext * cx, JSObject * obj,
jspropertyop_id id, jsval * vp)
OPENVRML_NOTHROW;
- static JSBool getAxis(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool inverse(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool multiply(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool multVec(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool setAxis(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool slerp(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSNATIVE(getAxis);
+ static OPENVRML_DECLARE_JSNATIVE(inverse);
+ static OPENVRML_DECLARE_JSNATIVE(multiply);
+ static OPENVRML_DECLARE_JSNATIVE(multVec);
+ static OPENVRML_DECLARE_JSNATIVE(setAxis);
+ static OPENVRML_DECLARE_JSNATIVE(slerp);
};
template <typename SFVec2>
@@ -536,9 +499,7 @@
OPENVRML_NOTHROW;
protected:
- static JSBool constructor(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSNATIVE(constructor);
static JSBool initObject(JSContext * cx, JSObject * obj,
const jsdouble (&vec)[2])
OPENVRML_NOTHROW;
@@ -548,30 +509,14 @@
static JSBool setProperty(JSContext * cx, JSObject * obj,
jspropertyop_id id, jsval * vp)
OPENVRML_NOTHROW;
- static JSBool add(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool divide(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool dot(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool length(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool multiply(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool negate(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool normalize(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool subtract(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSNATIVE(add);
+ static OPENVRML_DECLARE_JSNATIVE(divide);
+ static OPENVRML_DECLARE_JSNATIVE(dot);
+ static OPENVRML_DECLARE_JSNATIVE(length);
+ static OPENVRML_DECLARE_JSNATIVE(multiply);
+ static OPENVRML_DECLARE_JSNATIVE(negate);
+ static OPENVRML_DECLARE_JSNATIVE(normalize);
+ static OPENVRML_DECLARE_JSNATIVE(subtract);
};
class OPENVRML_JAVASCRIPT_LOCAL SFVec2f : public sfvec2_jsobject<SFVec2f> {
@@ -611,9 +556,7 @@
OPENVRML_NOTHROW;
protected:
- static JSBool constructor(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
+ static OPENVRML_DEFINE_JSNATIVE(constructor);
static JSBool initObject(JSContext * cx, JSObject * obj,
const jsdouble (&vec)[3])
OPENVRML_NOTHROW;
@@ -623,31 +566,15 @@
static JSBool setProperty(JSContext * cx, JSObject * obj,
jspropertyop_id id, jsval * vp)
OPENVRML_NOTHROW;
- static JSBool add(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval) OPENVRML_NOTHROW;
- static JSBool cross(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool divide(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool dot(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval) OPENVRML_NOTHROW;
- static JSBool length(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool multiply(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool negate(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool normalize(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool subtract(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
+ static OPENVRML_DEFINE_JSNATIVE(add);
+ static OPENVRML_DEFINE_JSNATIVE(cross);
+ static OPENVRML_DEFINE_JSNATIVE(divide);
+ static OPENVRML_DEFINE_JSNATIVE(dot);
+ static OPENVRML_DEFINE_JSNATIVE(length);
+ static OPENVRML_DEFINE_JSNATIVE(multiply);
+ static OPENVRML_DEFINE_JSNATIVE(negate);
+ static OPENVRML_DEFINE_JSNATIVE(normalize);
+ static OPENVRML_DEFINE_JSNATIVE(subtract);
};
class OPENVRML_JAVASCRIPT_LOCAL SFVec3f : public sfvec3_jsobject<SFVec3f> {
@@ -720,18 +647,14 @@
OPENVRML_NOTHROW;
protected:
- static JSBool construct(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * vp)
- OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSNATIVE(construct);
static JSBool setElement(JSContext * cx, JSObject * obj,
jspropertyop_id id, jsval * vp)
OPENVRML_NOTHROW;
static JSBool setLength(JSContext * cx, JSObject * obj,
jspropertyop_id id, jsval * vp)
OPENVRML_NOTHROW;
- static JSBool toString(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSNATIVE(toString);
static void finalize(JSContext * cx, JSObject * obj) OPENVRML_NOTHROW;
private:
@@ -751,18 +674,14 @@
OPENVRML_NOTHROW;
protected:
- static JSBool construct(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * vp)
- OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSNATIVE(construct);
static JSBool setElement(JSContext * cx, JSObject * obj,
jspropertyop_id id, jsval * vp)
OPENVRML_NOTHROW;
static JSBool setLength(JSContext * cx, JSObject * obj,
jspropertyop_id id, jsval * vp)
OPENVRML_NOTHROW;
- static JSBool toString(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSNATIVE(toString);
static void finalize(JSContext * cx, JSObject * obj) OPENVRML_NOTHROW;
private:
@@ -782,17 +701,14 @@
OPENVRML_THROW2(bad_conversion, std::bad_alloc);
private:
- static JSBool construct(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv,
- jsval * vp);
+ static OPENVRML_DECLARE_JSNATIVE(construct);
static JSBool initObject(JSContext * cx, JSObject * obj,
uintN argc, jsval * argv);
static JSBool setElement(JSContext * cx, JSObject * obj,
jspropertyop_id id, jsval * vp);
static JSBool setLength(JSContext * cx, JSObject * obj,
jspropertyop_id id, jsval * vp);
- static JSBool toString(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval);
+ static OPENVRML_DECLARE_JSNATIVE(toString);
static void finalize(JSContext * cx, JSObject * obj);
};
@@ -846,17 +762,14 @@
OPENVRML_THROW2(bad_conversion, std::bad_alloc);
private:
- static JSBool construct(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv,
- jsval * vp);
+ static OPENVRML_DECLARE_JSNATIVE(construct);
static JSBool initObject(JSContext * cx, JSObject * obj,
uintN argc, jsval * argv);
static JSBool setElement(JSContext * cx, JSObject * obj,
jspropertyop_id id, jsval * vp);
static JSBool setLength(JSContext * cx, JSObject * obj,
jspropertyop_id id, jsval * vp);
- static JSBool toString(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval);
+ static OPENVRML_DECLARE_JSNATIVE(toString);
static void finalize(JSContext * cx, JSObject * obj);
};
@@ -879,9 +792,7 @@
OPENVRML_THROW2(bad_conversion, std::bad_alloc);
private:
- static JSBool construct(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv,
- jsval * vp) OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSNATIVE(construct);
static JSBool initObject(JSContext * cx, JSObject * obj,
uintN argc, jsval * argv) OPENVRML_NOTHROW;
static JSBool setElement(JSContext * cx, JSObject * obj,
@@ -890,9 +801,7 @@
static JSBool setLength(JSContext * cx, JSObject * obj,
jspropertyop_id id, jsval * vp)
OPENVRML_NOTHROW;
- static JSBool toString(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSNATIVE(toString);
static void finalize(JSContext * cx, JSObject * obj) OPENVRML_NOTHROW;
};
@@ -924,9 +833,7 @@
OPENVRML_THROW2(bad_conversion, std::bad_alloc);
private:
- static JSBool construct(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv,
- jsval * vp) OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSNATIVE(construct);
static JSBool initObject(JSContext * cx, JSObject * obj,
uintN argc, jsval * argv) OPENVRML_NOTHROW;
static JSBool setElement(JSContext * cx, JSObject * obj,
@@ -935,9 +842,7 @@
static JSBool setLength(JSContext * cx, JSObject * obj,
jspropertyop_id id, jsval * vp)
OPENVRML_NOTHROW;
- static JSBool toString(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSNATIVE(toString);
static void finalize(JSContext * cx, JSObject * obj) OPENVRML_NOTHROW;
};
@@ -1022,10 +927,7 @@
static JSObject * initClass(JSContext * cx, JSObject * obj)
OPENVRML_NOTHROW;
- static JSBool construct(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv,
- jsval * vp)
- OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSNATIVE(construct);
static JSBool getElement(JSContext * cx, JSObject * obj,
jspropertyop_id id, jsval * vp)
OPENVRML_NOTHROW;
@@ -1038,10 +940,7 @@
static JSObject * initClass(JSContext * cx, JSObject * obj)
OPENVRML_NOTHROW;
- static JSBool construct(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv,
- jsval * vp)
- OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSNATIVE(construct);
static JSBool initObject(JSContext * cx, JSObject * obj,
const jsdouble (&mat)[16])
OPENVRML_NOTHROW;
@@ -1051,33 +950,15 @@
static JSBool setElement(JSContext * cx, JSObject * obj,
jspropertyop_id id, jsval * vp)
OPENVRML_NOTHROW;
- static JSBool setTransform(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool getTransform(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool inverse(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool transpose(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool multLeft(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool multRight(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool multVecMatrix(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool multMatrixVec(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
- static JSBool toString(JSContext * cx, JSObject * obj,
- uintN argc, jsval * argv, jsval * rval)
- OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSNATIVE(setTransform);
+ static OPENVRML_DECLARE_JSNATIVE(getTransform);
+ static OPENVRML_DECLARE_JSNATIVE(inverse);
+ static OPENVRML_DECLARE_JSNATIVE(transpose);
+ static OPENVRML_DECLARE_JSNATIVE(multLeft);
+ static OPENVRML_DECLARE_JSNATIVE(multRight);
+ static OPENVRML_DECLARE_JSNATIVE(multVecMatrix);
+ static OPENVRML_DECLARE_JSNATIVE(multMatrixVec);
+ static OPENVRML_DECLARE_JSNATIVE(toString);
static void finalize(JSContext * cx, JSObject * obj) OPENVRML_NOTHROW;
private:
@@ -2219,14 +2100,14 @@
namespace Global {
- JSBool print(JSContext * const cx, JSObject *,
- const uintN argc, jsval * const argv, jsval *)
+ OPENVRML_DEFINE_JSNATIVE(print)
{
script * const s = static_cast<script *>(JS_GetContextPrivate(cx));
assert(s);
for (uintN i = 0; i < argc; i++) {
- JSString * const str = JS_ValueToString(cx, argv[i]);
+ JSString * const str =
+ JS_ValueToString(cx, OPENVRML_JS_ARGV(cx, vp)[i]);
if (!str) { return JS_FALSE; }
s->script_node().scene()->browser()
.out(JS_EncodeString(cx, str));
@@ -2238,84 +2119,74 @@
namespace Browser {
- JSBool getName(JSContext * const cx, JSObject *,
- uintN, jsval *, jsval * const rval)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_JSNATIVE(getName)
{
script * const s = static_cast<script *>(JS_GetContextPrivate(cx));
assert(s);
const char * const name =
s->script_node().node::type().metatype().browser().name();
- *rval = STRING_TO_JSVAL(JS_InternString(cx, name));
+ OPENVRML_JS_SET_RVAL(cx, vp,
+ STRING_TO_JSVAL(JS_InternString(cx, name)));
return JS_TRUE;
}
- JSBool getVersion(JSContext * const cx, JSObject *,
- uintN, jsval *, jsval * const rval)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_JSNATIVE(getVersion)
{
script * const s = static_cast<script *>(JS_GetContextPrivate(cx));
assert(s);
const char * const version =
s->script_node().node::type().metatype().browser().version();
- *rval = STRING_TO_JSVAL(JS_InternString(cx, version));
+ OPENVRML_JS_SET_RVAL(cx, vp,
+ STRING_TO_JSVAL(JS_InternString(cx, version)));
return JS_TRUE;
}
- JSBool getCurrentSpeed(JSContext * const cx, JSObject *,
- uintN, jsval *, jsval * const rval)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_JSNATIVE(getCurrentSpeed)
{
script * const s = static_cast<script *>(JS_GetContextPrivate(cx));
assert(s);
const jsdouble speed =
s->script_node().type().metatype().browser().current_speed();
- return JS_NewNumberValue(cx, speed, rval);
+ jsval result_val;
+ const JSBool result = JS_NewNumberValue(cx, speed, &result_val);
+ OPENVRML_JS_SET_RVAL(cx, vp, result_val);
+ return result;
}
- JSBool getCurrentFrameRate(JSContext * const cx,
- JSObject *,
- uintN,
- jsval *,
- jsval * const rval)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_JSNATIVE(getCurrentFrameRate)
{
script * const s = static_cast<script *>(JS_GetContextPrivate(cx));
assert(s);
const jsdouble frame_rate =
s->script_node().type().metatype().browser().frame_rate();
- return JS_NewNumberValue(cx, frame_rate, rval);
+ jsval result_val;
+ const JSBool result =
+ JS_NewNumberValue(cx, frame_rate, &result_val);
+ OPENVRML_JS_SET_RVAL(cx, vp, result_val);
+ return result;
}
- JSBool getWorldURL(JSContext * const cx,
- JSObject *,
- uintN,
- jsval *,
- jsval * const rval)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_JSNATIVE(getWorldURL)
{
script * const s = static_cast<script *>(JS_GetContextPrivate(cx));
assert(s);
const std::string url =
s->script_node().node::type().metatype().browser().world_url();
- *rval = STRING_TO_JSVAL(JS_InternString(cx, url.c_str()));
+ OPENVRML_JS_SET_RVAL(cx, vp,
+ STRING_TO_JSVAL(
+ JS_InternString(cx, url.c_str())));
return JS_TRUE;
}
// No events will be processed after loadURL.
- JSBool loadURL(JSContext * const cx,
- JSObject *,
- const uintN argc,
- jsval * const argv,
- jsval *)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_JSNATIVE(loadURL)
{
using std::auto_ptr;
@@ -2330,10 +2201,14 @@
// Make sure our first argument (the URL) is an MFString.
//
JSObject * arg0_obj;
- if (!JS_ValueToObject(cx, argv[0], &arg0_obj)) { return JS_FALSE; }
- if (!JS_InstanceOf(cx, arg0_obj, &MFString::jsclass, argv)) {
+ if (!JS_ValueToObject(cx, OPENVRML_JS_ARGV(cx, vp)[0],
+ &arg0_obj)) {
return JS_FALSE;
}
+ if (!JS_InstanceOf(cx, arg0_obj, &MFString::jsclass,
+ OPENVRML_JS_ARGV(cx, vp))) {
+ return JS_FALSE;
+ }
auto_ptr<openvrml::mfstring> url_ptr =
MFString::createFromJSObject(cx, arg0_obj);
@@ -2346,10 +2221,14 @@
// Make sure our second argument is an MFString
//
JSObject * arg1_obj;
- if (!JS_ValueToObject(cx, argv[1], &arg1_obj)) { return JS_FALSE; }
- if (!JS_InstanceOf(cx, arg1_obj, &MFString::jsclass, argv)) {
+ if (!JS_ValueToObject(cx, OPENVRML_JS_ARGV(cx, vp)[1],
+ &arg1_obj)) {
return JS_FALSE;
}
+ if (!JS_InstanceOf(cx, arg1_obj, &MFString::jsclass,
+ OPENVRML_JS_ARGV(cx, vp))) {
+ return JS_FALSE;
+ }
auto_ptr<openvrml::mfstring> parameter_ptr =
MFString::createFromJSObject(cx, arg1_obj);
@@ -2374,12 +2253,7 @@
// This does return, but no events will be processed after it is called.
- JSBool replaceWorld(JSContext * const cx,
- JSObject *,
- uintN,
- jsval * const argv,
- jsval * const rval)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_JSNATIVE(replaceWorld)
{
using std::auto_ptr;
@@ -2390,10 +2264,13 @@
// Make sure our argument is an MFNode.
//
JSObject * arg_obj;
- if (!JS_ValueToObject(cx, argv[0], &arg_obj)) { return JS_FALSE; }
- if (!JS_InstanceOf(cx, arg_obj, &MFNode::jsclass, argv)) {
+ if (!JS_ValueToObject(cx, OPENVRML_JS_ARGV(cx, vp)[0], &arg_obj)) {
return JS_FALSE;
}
+ if (!JS_InstanceOf(cx, arg_obj, &MFNode::jsclass,
+ OPENVRML_JS_ARGV(cx, vp))) {
+ return JS_FALSE;
+ }
auto_ptr<openvrml::mfnode> nodes =
MFNode::createFromJSObject(cx, arg_obj);
@@ -2401,16 +2278,11 @@
s.script_node().scene()->browser().replace_world(nodes->value());
- *rval = JSVAL_VOID;
+ OPENVRML_JS_SET_RVAL(cx, vp, JSVAL_VOID);
return JS_TRUE;
}
- JSBool createVrmlFromString(JSContext * const cx,
- JSObject * const obj,
- uintN,
- jsval * const argv,
- jsval * const rval)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_JSNATIVE(createVrmlFromString)
{
assert(JS_GetContextPrivate(cx));
script & s = *static_cast<script *>(JS_GetContextPrivate(cx));
@@ -2418,7 +2290,7 @@
//
// Make sure our argument is a string.
//
- JSString * str = JS_ValueToString(cx, argv[0]);
+ JSString * str = JS_ValueToString(cx, OPENVRML_JS_ARGV(cx, vp)[0]);
if (!str) { return JS_FALSE; }
try {
@@ -2430,9 +2302,13 @@
browser.create_vrml_from_stream(in);
if (nodes.empty()) {
- *rval = JSVAL_NULL;
+ OPENVRML_JS_SET_RVAL(cx, vp, JSVAL_NULL);
} else {
- if (!MFNode::toJsval(nodes, cx, obj, rval)) { return JS_FALSE; }
+ if (!MFNode::toJsval(nodes, cx,
+ OPENVRML_JS_THIS_OBJECT(cx, vp),
+ &OPENVRML_JS_RVAL(cx, vp))) {
+ return JS_FALSE;
+ }
}
} catch (std::exception & ex) {
JS_ReportError(cx, ex.what());
@@ -2446,23 +2322,19 @@
// createVrmlFromURL( MFString url, SFNode node, SFString event )
- JSBool createVrmlFromURL(JSContext * const cx,
- JSObject *,
- const uintN argc,
- jsval * const argv,
- jsval * const rval)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_JSNATIVE(createVrmlFromURL)
{
using std::auto_ptr;
JSObject * url_obj = 0, * node_obj = 0;
JSString * event_str = 0;
- if (!JS_ConvertArguments(cx, argc, argv, "ooS",
+ if (!JS_ConvertArguments(cx, argc, OPENVRML_JS_ARGV(cx, vp), "ooS",
&url_obj, &node_obj, &event_str)) {
return JS_FALSE;
}
- if (!JS_InstanceOf(cx, url_obj, &MFString::jsclass, argv)) {
+ if (!JS_InstanceOf(cx, url_obj, &MFString::jsclass,
+ OPENVRML_JS_ARGV(cx, vp))) {
return JS_FALSE;
}
auto_ptr<openvrml::mfstring> url(MFString::createFromJSObject(cx,
@@ -2471,7 +2343,8 @@
script & s = *static_cast<script *>(JS_GetContextPrivate(cx));
JSClass & sfnode_jsclass = s.sfnode_class;
- if (!JS_InstanceOf(cx, node_obj, &sfnode_jsclass, argv)) {
+ if (!JS_InstanceOf(cx, node_obj, &sfnode_jsclass,
+ OPENVRML_JS_ARGV(cx, vp))) {
return JS_FALSE;
}
auto_ptr<openvrml::sfnode> node(SFNode::createFromJSObject(cx, node_obj));
@@ -2496,18 +2369,13 @@
return JS_FALSE;
}
- *rval = JSVAL_VOID;
+ OPENVRML_JS_SET_RVAL(cx, vp, JSVAL_VOID);
return JS_TRUE;
}
// addRoute(SFNode fromNode, String fromEventOut, SFNode toNode, String toEvent)
- JSBool addRoute(JSContext * const cx,
- JSObject *,
- uintN,
- jsval * const argv,
- jsval * const rval)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_JSNATIVE(addRoute)
{
using std::auto_ptr;
@@ -2515,10 +2383,13 @@
// Make sure our first argument (fromNode) is a SFNode.
//
JSObject * arg0_obj;
- if (!JS_ValueToObject(cx, argv[0], &arg0_obj)) { return JS_FALSE; }
+ if (!JS_ValueToObject(cx, OPENVRML_JS_ARGV(cx, vp)[0], &arg0_obj)) {
+ return JS_FALSE;
+ }
script & s = *static_cast<script *>(JS_GetContextPrivate(cx));
JSClass & sfnode_jsclass = s.sfnode_class;
- if (!JS_InstanceOf(cx, arg0_obj, &sfnode_jsclass, argv)) {
+ if (!JS_InstanceOf(cx, arg0_obj, &sfnode_jsclass,
+ OPENVRML_JS_ARGV(cx, vp))) {
return JS_FALSE;
}
auto_ptr<openvrml::sfnode> fromNode =
@@ -2534,7 +2405,8 @@
//
// Makes sure our second argument (fromEventOut) is a string.
//
- JSString * arg1_str = JS_ValueToString(cx, argv[1]);
+ JSString * arg1_str =
+ JS_ValueToString(cx, OPENVRML_JS_ARGV(cx, vp)[1]);
if (!arg1_str) { return JS_FALSE; }
const char * const fromEventOut = JS_EncodeString(cx, arg1_str);
@@ -2542,10 +2414,13 @@
// Make sure our third argument (toNode) is a SFNode.
//
JSObject * arg2_obj;
- if (!JS_ValueToObject(cx, argv[2], &arg2_obj)) { return JS_FALSE; }
- if (!JS_InstanceOf(cx, arg2_obj, &sfnode_jsclass, argv)) {
+ if (!JS_ValueToObject(cx, OPENVRML_JS_ARGV(cx, vp)[2], &arg2_obj)) {
return JS_FALSE;
}
+ if (!JS_InstanceOf(cx, arg2_obj, &sfnode_jsclass,
+ OPENVRML_JS_ARGV(cx, vp))) {
+ return JS_FALSE;
+ }
auto_ptr<openvrml::sfnode> toNode =
SFNode::createFromJSObject(cx, arg2_obj);
//
@@ -2559,7 +2434,8 @@
//
// Makes sure our fourth argument (toEventIn) is a string.
//
- JSString * arg3_str = JS_ValueToString(cx, argv[3]);
+ JSString * arg3_str =
+ JS_ValueToString(cx, OPENVRML_JS_ARGV(cx, vp)[3]);
if (!arg3_str) { return JS_FALSE; }
const char * const toEventIn = JS_EncodeString(cx, arg3_str);
@@ -2573,18 +2449,13 @@
return JS_FALSE;
}
- *rval = JSVAL_VOID;
+ OPENVRML_JS_SET_RVAL(cx, vp, JSVAL_VOID);
return JS_TRUE;
}
// deleteRoute(SFNode fromNode, String fromEventOut, SFNode toNode, String toEvent)
- JSBool deleteRoute(JSContext * const cx,
- JSObject *,
- uintN,
- jsval * const argv,
- jsval * const rval)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_JSNATIVE(deleteRoute)
{
using std::auto_ptr;
@@ -2592,10 +2463,13 @@
// Make sure our first argument (fromNode) is a SFNode.
//
JSObject * arg0_obj;
- if (!JS_ValueToObject(cx, argv[0], &arg0_obj)) { return JS_FALSE; }
+ if (!JS_ValueToObject(cx, OPENVRML_JS_ARGV(cx, vp)[0], &arg0_obj)) {
+ return JS_FALSE;
+ }
script & s = *static_cast<script *>(JS_GetContextPrivate(cx));
JSClass & sfnode_jsclass = s.sfnode_class;
- if (!JS_InstanceOf(cx, arg0_obj, &sfnode_jsclass, argv)) {
+ if (!JS_InstanceOf(cx, arg0_obj, &sfnode_jsclass,
+ OPENVRML_JS_ARGV(cx, vp))) {
return JS_FALSE;
}
auto_ptr<openvrml::sfnode> fromNode =
@@ -2604,7 +2478,8 @@
//
// Makes sure our second argument (fromEventOut) is a string.
//
- JSString * arg1_str = JS_ValueToString(cx, argv[1]);
+ JSString * arg1_str =
+ JS_ValueToString(cx, OPENVRML_JS_ARGV(cx, vp)[1]);
if (!arg1_str) { return JS_FALSE; }
const char * const fromEventOut = JS_EncodeString(cx, arg1_str);
@@ -2612,17 +2487,21 @@
// Make sure our third argument (toNode) is a SFNode.
//
JSObject * arg2_obj;
- if (!JS_ValueToObject(cx, argv[2], &arg2_obj)) { return JS_FALSE; }
- if (!JS_InstanceOf(cx, arg2_obj, &sfnode_jsclass, argv)) {
+ if (!JS_ValueToObject(cx, OPENVRML_JS_ARGV(cx, vp)[2], &arg2_obj)) {
return JS_FALSE;
}
+ if (!JS_InstanceOf(cx, arg2_obj, &sfnode_jsclass,
+ OPENVRML_JS_ARGV(cx, vp))) {
+ return JS_FALSE;
+ }
auto_ptr<openvrml::sfnode> toNode =
SFNode::createFromJSObject(cx, arg2_obj);
//
// Makes sure our fourth argument (toEventIn) is a string.
//
- JSString * arg3_str = JS_ValueToString(cx, argv[3]);
+ JSString * arg3_str =
+ JS_ValueToString(cx, OPENVRML_JS_ARGV(cx, vp)[3]);
if (!arg3_str) { return JS_FALSE; }
const char * const toEventIn = JS_EncodeString(cx, arg3_str);
@@ -2631,24 +2510,19 @@
*toNode->value(),
toEventIn);
- *rval = JSVAL_VOID;
+ OPENVRML_JS_SET_RVAL(cx, vp, JSVAL_VOID);
return JS_TRUE;
}
- JSBool setDescription(JSContext * const cx,
- JSObject *,
- uintN,
- jsval * const argv,
- jsval * const rval)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_JSNATIVE(setDescription)
{
- JSString * str = JS_ValueToString(cx, argv[0]);
+ JSString * str = JS_ValueToString(cx, OPENVRML_JS_ARGV(cx, vp)[0]);
if (!str) { return JS_FALSE; }
assert(JS_GetContextPrivate(cx));
script & s = *static_cast<script *>(JS_GetContextPrivate(cx));
openvrml::browser & browser = s.script_node().scene()->browser();
browser.description(JS_EncodeString(cx, str));
- *rval = JSVAL_VOID;
+ OPENVRML_JS_SET_RVAL(cx, vp, JSVAL_VOID);
return JS_TRUE;
}
@@ -2694,19 +2568,18 @@
JS_SetPrivate(cx, obj, 0);
}
- JSBool sfield::toString(JSContext * const cx, JSObject * const obj,
- uintN, jsval *, jsval * const rval)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_MEMBER_JSNATIVE(sfield, toString)
{
- assert(JS_GetPrivate(cx, obj));
+ assert(JS_GetPrivate(cx, OPENVRML_JS_THIS_OBJECT(cx, vp)));
const sfield::sfdata & sfdata =
- *static_cast<sfield::sfdata *>(JS_GetPrivate(cx, obj));
+ *static_cast<sfield::sfdata *>(
+ JS_GetPrivate(cx, OPENVRML_JS_THIS_OBJECT(cx, vp)));
std::ostringstream out;
out << sfdata.field_value();
JSString * const jsstr = JS_NewStringCopyZ(cx, out.str().c_str());
if (!jsstr) { return JS_FALSE; }
- *rval = STRING_TO_JSVAL(jsstr);
+ OPENVRML_JS_SET_RVAL(cx, vp, STRING_TO_JSVAL(jsstr));
return JS_TRUE;
}
@@ -2801,27 +2674,29 @@
sfdata.field_value().clone().release()));
}
- JSBool SFColor::construct(JSContext * const cx,
- JSObject * obj,
- const uintN argc,
- jsval * const argv,
- jsval * const rval)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_MEMBER_JSNATIVE(SFColor, construct)
{
jsdouble rgb[3] = {};
- if (!JS_ConvertArguments(cx, argc, argv, "/ddd",
+ if (!JS_ConvertArguments(cx, argc, OPENVRML_JS_ARGV(cx, vp), "/ddd",
&rgb[0], &rgb[1], &rgb[2])) {
return JS_FALSE;
}
+# ifdef OPENVRML_FAST_JSNATIVE
+ JSObject * obj = 0;
+# endif
+# ifndef OPENVRML_FAST_JSNATIVE
//
// If called without new, replace obj with a new object.
//
- if (!JS_IsConstructing(cx)) {
+ if (!OPENVRML_JS_IS_CONSTRUCTING(cx, vp)) {
+# endif
obj = JS_NewObject(cx, &jsclass, 0, 0);
if (!obj) { return JS_FALSE; }
- *rval = OBJECT_TO_JSVAL(obj);
+ OPENVRML_JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
+# ifndef OPENVRML_FAST_JSNATIVE
}
+# endif
return initObject(cx, obj, rgb);
}
@@ -2934,22 +2809,19 @@
return JS_TRUE;
}
- JSBool SFColor::setHSV(JSContext * const cx,
- JSObject * const obj,
- const uintN argc,
- jsval * const argv,
- jsval * const rval)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_MEMBER_JSNATIVE(SFColor, setHSV)
{
- assert(JS_GetPrivate(cx, obj));
+ assert(JS_GetPrivate(cx, OPENVRML_JS_THIS_OBJECT(cx, vp)));
sfield::sfdata & sfdata =
- *static_cast<sfield::sfdata *>(JS_GetPrivate(cx, obj));
+ *static_cast<sfield::sfdata *>(
+ JS_GetPrivate(cx, OPENVRML_JS_THIS_OBJECT(cx, vp)));
openvrml::sfcolor & thisColor =
*boost::polymorphic_downcast<openvrml::sfcolor *>(
&sfdata.field_value());
jsdouble h = 0.0, s = 0.0, v = 0.0;
- if (!JS_ConvertArguments(cx, argc, argv, "/ddd", &h, &s, &v)) {
+ if (!JS_ConvertArguments(cx, argc, OPENVRML_JS_ARGV(cx, vp),
+ "/ddd", &h, &s, &v)) {
return JS_FALSE;
}
@@ -2969,21 +2841,17 @@
openvrml::color val = thisColor.value();
val.hsv(float(h), float(s), float(v));
thisColor.value(val);
- *rval = JSVAL_VOID;
+ OPENVRML_JS_SET_RVAL(cx, vp, JSVAL_VOID);
sfdata.changed = true;
return JS_TRUE;
}
- JSBool SFColor::getHSV(JSContext * const cx,
- JSObject * const obj,
- uintN,
- jsval *,
- jsval * const rval)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_MEMBER_JSNATIVE(SFColor, getHSV)
{
- assert(JS_GetPrivate(cx, obj));
+ assert(JS_GetPrivate(cx, OPENVRML_JS_THIS_OBJECT(cx, vp)));
const sfield::sfdata & sfdata =
- *static_cast<sfield::sfdata *>(JS_GetPrivate(cx, obj));
+ *static_cast<sfield::sfdata *>(
+ JS_GetPrivate(cx, OPENVRML_JS_THIS_OBJECT(cx, vp)));
const openvrml::sfcolor & thisColor =
*boost::polymorphic_downcast<openvrml::sfcolor *>(
&sfdata.field_value());
@@ -2991,7 +2859,7 @@
float hsv[3];
thisColor.value().hsv(hsv);
- return floatsToJSArray(3, hsv, cx, rval);
+ return floatsToJSArray(3, hsv, cx, &OPENVRML_JS_RVAL(cx, vp));
}
@@ -3093,32 +2961,35 @@
sfdata.field_value().clone().release()));
}
- JSBool SFImage::construct(JSContext * const cx,
- JSObject * obj,
- const uintN argc,
- jsval * const argv,
- jsval * const rval)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_MEMBER_JSNATIVE(SFImage, construct)
{
uint32 x = 0, y = 0, comp = 0;
JSObject * pixels = 0;
- if (!JS_ConvertArguments(cx, argc, argv, "uuuo",
+ if (!JS_ConvertArguments(cx, argc, OPENVRML_JS_ARGV(cx, vp), "uuuo",
&x, &y, &comp, &pixels)) {
return JS_FALSE;
}
- if (pixels && !JS_InstanceOf(cx, pixels, &MFInt32::jsclass, argv)) {
+ if (pixels && !JS_InstanceOf(cx, pixels, &MFInt32::jsclass,
+ OPENVRML_JS_ARGV(cx, vp))) {
return JS_FALSE;
}
+# ifdef OPENVRML_FAST_JSNATIVE
+ JSObject * obj = 0;
+# endif
+# ifndef OPENVRML_FAST_JSNATIVE
//
// If called without new, replace obj with a new object.
//
- if (!JS_IsConstructing(cx)) {
+ if (!OPENVRML_JS_IS_CONSTRUCTING(cx, vp)) {
+# endif
obj = JS_NewObject(cx, &jsclass, 0, 0);
if (!obj) { return JS_FALSE; }
- *rval = OBJECT_TO_JSVAL(obj);
+ OPENVRML_JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
+# ifndef OPENVRML_FAST_JSNATIVE
}
+# endif
return initObject(cx, obj, x, y, comp, pixels);
}
@@ -3349,28 +3220,32 @@
sfdata.field_value().clone().release()));
}
- JSBool SFNode::construct(JSContext * const cx,
- JSObject * obj,
- const uintN argc,
- jsval * const argv,
- jsval * rval)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_MEMBER_JSNATIVE(SFNode, construct)
{
JSString * vrmlstring = 0;
- if (!JS_ConvertArguments(cx, argc, argv, "S", &vrmlstring)) {
+ if (!JS_ConvertArguments(cx, argc, OPENVRML_JS_ARGV(cx, vp), "S",
+ &vrmlstring)) {
return JS_FALSE;
}
script & s = *static_cast<script *>(JS_GetContextPrivate(cx));
JSClass & jsclass = s.sfnode_class;
+
+# ifdef OPENVRML_FAST_JSNATIVE
+ JSObject * obj = 0;
+# endif
+# ifndef OPENVRML_FAST_JSNATIVE
//
// If called without new, replace obj with a new object.
//
- if (!JS_IsConstructing(cx)) {
+ if (!OPENVRML_JS_IS_CONSTRUCTING(cx, vp)) {
+# endif
obj = JS_NewObject(cx, &jsclass, 0, 0);
if (!obj) { return JS_FALSE; }
- *rval = OBJECT_TO_JSVAL(obj);
+ OPENVRML_JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
+# ifndef OPENVRML_FAST_JSNATIVE
}
+# endif
return initObject(cx, obj, vrmlstring);
}
@@ -3606,21 +3481,19 @@
sfdata.field_value().clone().release()));
}
- JSBool SFRotation::construct(JSContext * const cx,
- JSObject * obj,
- const uintN argc,
- jsval * const argv,
- jsval * const rval)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_MEMBER_JSNATIVE(SFRotation, construct)
{
jsdouble rot[4] = { 0.0, 1.0, 0.0, 0.0 };
- if (argc > 1 && JSVAL_IS_OBJECT(argv[0]) && JSVAL_IS_NUMBER(argv[1])) {
+ if (argc > 1 && JSVAL_IS_OBJECT(OPENVRML_JS_ARGV(cx, vp)[0])
+ && JSVAL_IS_NUMBER(OPENVRML_JS_ARGV(cx, vp)[1])) {
JSObject * axis_obj = 0;
- if (!JS_ConvertArguments(cx, argc, argv, "od", &axis_obj, &rot[3])) {
+ if (!JS_ConvertArguments(cx, argc, OPENVRML_JS_ARGV(cx, vp), "od",
+ &axis_obj, &rot[3])) {
return JS_FALSE;
}
if (axis_obj
- && !JS_InstanceOf(cx, axis_obj, &SFVec3f::jsclass, argv)) {
+ && !JS_InstanceOf(cx, axis_obj, &SFVec3f::jsclass,
+ OPENVRML_JS_ARGV(cx, vp))) {
return JS_FALSE;
}
assert(JS_GetPrivate(cx, axis_obj));
@@ -3632,16 +3505,19 @@
rot[0] = axis.value().x();
rot[1] = axis.value().y();
rot[2] = axis.value().z();
- } else if (argc > 1 && JSVAL_IS_OBJECT(argv[0])
- && JSVAL_IS_OBJECT(argv[1])) {
+ } else if (argc > 1 && JSVAL_IS_OBJECT(OPENVRML_JS_ARGV(cx, vp)[0])
+ && JSVAL_IS_OBJECT(OPENVRML_JS_ARGV(cx, vp)[1])) {
JSObject * from_obj = 0, * to_obj = 0;
- if (!JS_ConvertArguments(cx, argc, argv, "oo", &from_obj, &to_obj)) {
+ if (!JS_ConvertArguments(cx, argc, OPENVRML_JS_ARGV(cx, vp), "oo",
+ &from_obj, &to_obj)) {
return JS_FALSE;
}
if ((from_obj
- && !JS_InstanceOf(cx, from_obj, &SFVec3f::jsclass, argv))
+ && !JS_InstanceOf(cx, from_obj, &SFVec3f::jsclass,
+ OPENVRML_JS_ARGV(cx, vp)))
|| (to_obj
- && !JS_InstanceOf(cx, to_obj, &SFVec3f::jsclass, argv))) {
+ && !JS_InstanceOf(cx, to_obj, &SFVec3f::jsclass,
+ OPENVRML_JS_ARGV(cx, vp)))) {
return JS_FALSE;
}
@@ -3666,19 +3542,27 @@
rot[2] = axis.z();
rot[3] = acos(from_vec.value().dot(to_vec.value())
/ (from_vec.value().length() * to_vec.value().length()));
- } else if (!JS_ConvertArguments(cx, argc, argv, "/dddd",
+ } else if (!JS_ConvertArguments(cx, argc, OPENVRML_JS_ARGV(cx, vp),
+ "/dddd",
&rot[0], &rot[1], &rot[2], &rot[3])) {
return JS_FALSE;
}
+# ifdef OPENVRML_FAST_JSNATIVE
+ JSObject * obj = 0;
+# end...
[truncated message content] |