|
From: <br...@us...> - 2012-08-19 04:37:27
|
Revision: 4313
http://openvrml.svn.sourceforge.net/openvrml/?rev=4313&view=rev
Author: braden
Date: 2012-08-19 04:37:17 +0000 (Sun, 19 Aug 2012)
Log Message:
-----------
XULRunner 14.0 replaces the JSContext* argument to JSFinalizeOp with JSFreeOp* and removes the JSContext* argument from JS_GetParent.
Modified Paths:
--------------
trunk/ChangeLog
trunk/configure.ac
trunk/src/script/javascript.cpp
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2012-08-19 04:36:20 UTC (rev 4312)
+++ trunk/ChangeLog 2012-08-19 04:37:17 UTC (rev 4313)
@@ -1,5 +1,15 @@
2012-08-19 Braden McDaniel <br...@en...>
+ XULRunner 14.0 replaces the JSContext* argument to JSFinalizeOp
+ with JSFreeOp* and removes the JSContext* argument from
+ JS_GetParent.
+
+ * configure.ac
+ * src/script/javascript.cpp
+
+
+2012-08-19 Braden McDaniel <br...@en...>
+
* src/script/javascript.cpp: JS_SetPrivate no longer returns a
boolean value.
Modified: trunk/configure.ac
===================================================================
--- trunk/configure.ac 2012-08-19 04:36:20 UTC (rev 4312)
+++ trunk/configure.ac 2012-08-19 04:37:17 UTC (rev 4313)
@@ -324,6 +324,45 @@
[Defined if JS_SetContext does not take a JSContext argument])])
#
+# XULRunner 14.0 replaces the JSContext* argument to JSFinalizeOp with
+# JSFreeOp*.
+#
+AC_CACHE_CHECK([whether SpiderMonkey JSFinalizeOp uses JSFreeOp],
+[ov_cv_jsfinalizeop_uses_jsfreeop],
+[ov_cv_jsfinalizeop_uses_jsfreeop=no
+ov_save_CPPFLAGS=$CPPFLAGS
+CPPFLAGS="$JS_CFLAGS $CPPFLAGS"
+AC_LANG_ASSERT([C])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+[[#include <jsapi.h>]],
+[[JSFreeOp * fop = 0; JSFinalizeOp finalize = 0; finalize(fop, 0)]])],
+[ov_cv_jsfinalizeop_uses_jsfreeop=yes])
+CPPFLAGS=$ov_save_CPPFLAGS
+])
+AS_IF([test X$ov_cv_jsfinalizeop_uses_jsfreeop = Xyes],
+ [AC_DEFINE([OPENVRML_JS_FINALIZEOP_USES_FREEOP], [1],
+ [Defined if JSFinalizeOp takes a JSFreeOp argument])])
+
+#
+# XULRunner 14.0 removes the JSContext argument from JS_GetParent.
+#
+AC_CACHE_CHECK([whether SpiderMonkey JS_GetParent is used without a JSContext],
+[ov_cv_js_getparent_without_context],
+[ov_cv_js_getparent_without_context=no
+ov_save_CPPFLAGS=$CPPFLAGS
+CPPFLAGS="$JS_CFLAGS $CPPFLAGS"
+AC_LANG_ASSERT([C])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+[[#include <jsapi.h>]],
+[[JS_GetParent(0)]])],
+[ov_cv_js_getparent_without_context=yes])
+CPPFLAGS=$ov_save_CPPFLAGS
+])
+AS_IF([test X$ov_cv_js_getparent_without_context = Xyes],
+ [AC_DEFINE([OPENVRML_JS_GETPARENT_WITHOUT_CONTEXT], [1],
+ [Defined if JS_GetParent does not take a JSContext argument])])
+
+#
# 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 2012-08-19 04:36:20 UTC (rev 4312)
+++ trunk/src/script/javascript.cpp 2012-08-19 04:37:17 UTC (rev 4313)
@@ -164,7 +164,17 @@
# endif
}
+ OPENVRML_LOCAL
+ JSObject * js_get_parent(JSContext * const cx, JSObject * const obj)
+ {
+# ifdef OPENVRML_JS_GETPARENT_WITHOUT_CONTEXT
+ return JS_GetParent(obj);
+# else
+ return JS_GetParent(cx, obj);
+# endif
+ }
+
# ifdef OPENVRML_FAST_JSNATIVE
# define OPENVRML_DECLARE_JSNATIVE(name) \
JSBool (name)(JSContext * cx, unsigned argc, jsval * vp)
@@ -268,6 +278,22 @@
JSPropertyOp openvrml_JS_StrictPropertyStub = JS_PropertyStub;
# endif
+# ifdef OPENVRML_JS_FINALIZEOP_USES_FREEOP
+# define OPENVRML_DECLARE_JSFINALIZEOP(name) \
+ void (name)(JSFreeOp * fop, JSObject * obj)
+
+# define OPENVRML_DEFINE_MEMBER_JSFINALIZEOP(class_name, name) \
+ void class_name::name(JSFreeOp * fop, JSObject * obj)
+
+# else
+# define OPENVRML_DECLARE_JSFINALIZEOP(name) \
+ void (name)(JSContext * cx, JSObject * obj)
+
+# define OPENVRML_DEFINE_MEMBER_JSFINALIZEOP(class_name, name) \
+ void class_name::name(JSContext * cx, JSObject * obj)
+
+# endif
+
class SFNode;
class MFNode;
@@ -489,7 +515,7 @@
};
protected:
- static void finalize(JSContext * cx, JSObject * obj) OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSFINALIZEOP(finalize);
static OPENVRML_DECLARE_JSNATIVE(toString);
private:
sfield();
@@ -755,7 +781,7 @@
static OPENVRML_DECLARE_JSSTRICTPROPERTYOP(setElement);
static OPENVRML_DECLARE_JSSTRICTPROPERTYOP(setLength);
static OPENVRML_DECLARE_JSNATIVE(toString);
- static void finalize(JSContext * cx, JSObject * obj) OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSFINALIZEOP(finalize);
private:
static JSBool initObject(JSContext * cx, JSObject * obj,
@@ -778,7 +804,7 @@
static OPENVRML_DECLARE_JSSTRICTPROPERTYOP(setElement);
static OPENVRML_DECLARE_JSSTRICTPROPERTYOP(setLength);
static OPENVRML_DECLARE_JSNATIVE(toString);
- static void finalize(JSContext * cx, JSObject * obj) OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSFINALIZEOP(finalize);
private:
static JSBool initObject(JSContext * cx, JSObject * obj,
@@ -803,7 +829,7 @@
static OPENVRML_DECLARE_JSSTRICTPROPERTYOP(setElement);
static OPENVRML_DECLARE_JSSTRICTPROPERTYOP(setLength);
static OPENVRML_DECLARE_JSNATIVE(toString);
- static void finalize(JSContext * cx, JSObject * obj);
+ static OPENVRML_DECLARE_JSFINALIZEOP(finalize);
};
class OPENVRML_JAVASCRIPT_LOCAL MFColor : public MFJSObject<MFColor> {
@@ -862,7 +888,7 @@
static OPENVRML_DECLARE_JSSTRICTPROPERTYOP(setElement);
static OPENVRML_DECLARE_JSSTRICTPROPERTYOP(setLength);
static OPENVRML_DECLARE_JSNATIVE(toString);
- static void finalize(JSContext * cx, JSObject * obj);
+ static OPENVRML_DECLARE_JSFINALIZEOP(finalize);
};
//
@@ -890,7 +916,7 @@
static OPENVRML_DECLARE_JSSTRICTPROPERTYOP(setElement);
static OPENVRML_DECLARE_JSSTRICTPROPERTYOP(setLength);
static OPENVRML_DECLARE_JSNATIVE(toString);
- static void finalize(JSContext * cx, JSObject * obj) OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSFINALIZEOP(finalize);
};
class OPENVRML_JAVASCRIPT_LOCAL MFRotation : public MFJSObject<MFRotation> {
@@ -927,7 +953,7 @@
static OPENVRML_DECLARE_JSSTRICTPROPERTYOP(setElement);
static OPENVRML_DECLARE_JSSTRICTPROPERTYOP(setLength);
static OPENVRML_DECLARE_JSNATIVE(toString);
- static void finalize(JSContext * cx, JSObject * obj) OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSFINALIZEOP(finalize);
};
class OPENVRML_JAVASCRIPT_LOCAL MFTime : public MFJSDouble<MFTime> {
@@ -1039,7 +1065,7 @@
static OPENVRML_DECLARE_JSNATIVE(multVecMatrix);
static OPENVRML_DECLARE_JSNATIVE(multMatrixVec);
static OPENVRML_DECLARE_JSNATIVE(toString);
- static void finalize(JSContext * cx, JSObject * obj) OPENVRML_NOTHROW;
+ static OPENVRML_DECLARE_JSFINALIZEOP(finalize);
private:
VrmlMatrix();
@@ -2618,9 +2644,11 @@
return *this->field_value_;
}
- void sfield::finalize(JSContext * const cx, JSObject * const obj)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_MEMBER_JSFINALIZEOP(sfield, finalize)
{
+# ifdef OPENVRML_JS_FINALIZEOP_USES_FREEOP
+ static JSContext * const cx = 0;
+# endif
delete static_cast<field_data *>(js_get_private(cx, obj));
js_set_private(cx, obj, 0);
}
@@ -3760,7 +3788,7 @@
static JSObject * const proto = 0;
JSObject * const parent =
- JS_GetParent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
+ js_get_parent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
JSObject * const robj =
js_construct_object(cx, &SFRotation::jsclass, proto, parent);
if (!robj) { return JS_FALSE; }
@@ -3809,7 +3837,7 @@
//
static JSObject * const proto = 0;
JSObject * const parent =
- JS_GetParent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
+ js_get_parent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
JSObject * const robj =
js_construct_object(cx, &SFRotation::jsclass, proto, parent);
if (!robj) { return JS_FALSE; }
@@ -3858,7 +3886,7 @@
//
static JSObject * const proto = 0;
JSObject * const parent =
- JS_GetParent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
+ js_get_parent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
JSObject * const robj =
js_construct_object(cx, &SFVec3f::jsclass, proto, parent);
if (!robj) { return JS_FALSE; }
@@ -3950,7 +3978,7 @@
//
static JSObject * const proto = 0;
JSObject * const parent =
- JS_GetParent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
+ js_get_parent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
JSObject * const robj =
js_construct_object(cx, &SFRotation::jsclass, proto, parent);
if (!robj) { return JS_FALSE; }
@@ -4227,7 +4255,7 @@
//
static JSObject * const proto = 0;
JSObject * const parent =
- JS_GetParent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
+ js_get_parent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
JSObject * const robj =
js_construct_object(cx, &SFVec2::jsclass, proto, parent);
if (!robj) { return JS_FALSE; }
@@ -4270,7 +4298,7 @@
//
static JSObject * const proto = 0;
JSObject * const parent =
- JS_GetParent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
+ js_get_parent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
JSObject * const robj =
js_construct_object(cx, &SFVec2::jsclass, proto, parent);
if (!robj) { return JS_FALSE; }
@@ -4371,7 +4399,7 @@
//
static JSObject * const proto = 0;
JSObject * const parent =
- JS_GetParent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
+ js_get_parent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
JSObject * const robj =
js_construct_object(cx, &SFVec2::jsclass, proto, parent);
if (!robj) { return JS_FALSE; }
@@ -4405,7 +4433,7 @@
//
static JSObject * const proto = 0;
JSObject * const parent =
- JS_GetParent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
+ js_get_parent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
JSObject * const robj =
js_construct_object(cx, &SFVec2::jsclass, proto, parent);
if (!robj) { return JS_FALSE; }
@@ -4439,7 +4467,7 @@
//
static JSObject * const proto = 0;
JSObject * const parent =
- JS_GetParent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
+ js_get_parent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
JSObject * const robj =
js_construct_object(cx, &SFVec2::jsclass, proto, parent);
if (!robj) { return JS_FALSE; }
@@ -4493,7 +4521,7 @@
//
static JSObject * const proto = 0;
JSObject * const parent =
- JS_GetParent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
+ js_get_parent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
JSObject * const robj =
js_construct_object(cx, &SFVec2::jsclass, proto, parent);
if (!robj) { return JS_FALSE; }
@@ -4838,7 +4866,7 @@
//
static JSObject * const proto = 0;
JSObject * const parent =
- JS_GetParent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
+ js_get_parent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
JSObject * const robj =
js_construct_object(cx, &SFVec3::jsclass, proto, parent);
if (!robj) { return JS_FALSE; }
@@ -4892,7 +4920,7 @@
//
static JSObject * const proto = 0;
JSObject * const parent =
- JS_GetParent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
+ js_get_parent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
JSObject * const robj =
js_construct_object(cx, &SFVec3::jsclass, proto, parent);
if (!robj) {return JS_FALSE; }
@@ -4935,7 +4963,7 @@
//
static JSObject * const proto = 0;
JSObject * const parent =
- JS_GetParent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
+ js_get_parent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
JSObject * const robj =
js_construct_object(cx, &SFVec3::jsclass, proto, parent);
if (!robj) { return JS_FALSE; }
@@ -5036,7 +5064,7 @@
//
static JSObject * const proto = 0;
JSObject * const parent =
- JS_GetParent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
+ js_get_parent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
JSObject * const robj =
js_construct_object(cx, &SFVec3::jsclass, proto, parent);
if (!robj) { return JS_FALSE; }
@@ -5070,7 +5098,7 @@
//
static JSObject * const proto = 0;
JSObject * const parent =
- JS_GetParent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
+ js_get_parent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
JSObject * const robj =
js_construct_object(cx, &SFVec3::jsclass, proto, parent);
if (!robj) { return JS_FALSE; }
@@ -5104,7 +5132,7 @@
//
static JSObject * const proto = 0;
JSObject * const parent =
- JS_GetParent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
+ js_get_parent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
JSObject * const robj =
js_construct_object(cx, &SFVec3::jsclass, proto, parent);
if (!robj) { return JS_FALSE; }
@@ -5158,7 +5186,7 @@
//
static JSObject * const proto = 0;
JSObject * const parent =
- JS_GetParent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
+ js_get_parent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
JSObject * const robj =
js_construct_object(cx, &SFVec3::jsclass, proto, parent);
if (!robj) { return JS_FALSE; }
@@ -5522,11 +5550,12 @@
}
template <typename Subclass>
- void MFJSObject<Subclass>::finalize(JSContext * const cx, JSObject * const obj)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_MEMBER_JSFINALIZEOP(MFJSObject<Subclass>, finalize)
{
- assert(cx);
assert(obj);
+# ifdef OPENVRML_JS_FINALIZEOP_USES_FREEOP
+ static JSContext * const cx = 0;
+# endif
MFData * const mfdata = static_cast<MFData *>(js_get_private(cx, obj));
if (mfdata) {
RemoveRoots(cx, mfdata->array);
@@ -5735,9 +5764,11 @@
}
template <typename Subclass>
- void MFJSDouble<Subclass>::finalize(JSContext * const cx, JSObject * const obj)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_MEMBER_JSFINALIZEOP(MFJSDouble<Subclass>, finalize)
{
+# ifdef OPENVRML_JS_FINALIZEOP_USES_FREEOP
+ static JSContext * const cx = 0;
+# endif
MFData * const mfdata = static_cast<MFData *>(js_get_private(cx, obj));
if (mfdata) {
RemoveRoots(cx, mfdata->array);
@@ -5946,8 +5977,11 @@
return JS_TRUE;
}
- void MFBool::finalize(JSContext * const cx, JSObject * const obj)
+ OPENVRML_DEFINE_MEMBER_JSFINALIZEOP(MFBool, finalize)
{
+# ifdef OPENVRML_JS_FINALIZEOP_USES_FREEOP
+ static JSContext * const cx = 0;
+# endif
delete static_cast<MFData *>(js_get_private(cx, obj));
js_set_private(cx, obj, 0);
}
@@ -6414,8 +6448,11 @@
return JS_TRUE;
}
- void MFInt32::finalize(JSContext * const cx, JSObject * const obj)
+ OPENVRML_DEFINE_MEMBER_JSFINALIZEOP(MFInt32, finalize)
{
+# ifdef OPENVRML_JS_FINALIZEOP_USES_FREEOP
+ static JSContext * const cx = 0;
+# endif
delete static_cast<MFData *>(js_get_private(cx, obj));
js_set_private(cx, obj, 0);
}
@@ -6717,11 +6754,12 @@
return JS_TRUE;
}
- void MFNode::finalize(JSContext * const cx, JSObject * const obj)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_MEMBER_JSFINALIZEOP(MFNode, finalize)
{
- assert(cx);
assert(obj);
+# ifdef OPENVRML_JS_FINALIZEOP_USES_FREEOP
+ static JSContext * const cx = 0;
+# endif
MFData * const mfdata = static_cast<MFData *>(js_get_private(cx, obj));
if (mfdata) {
RemoveRoots(cx, mfdata->array);
@@ -7067,9 +7105,11 @@
return JS_TRUE;
}
- void MFString::finalize(JSContext * const cx, JSObject * const obj)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_MEMBER_JSFINALIZEOP(MFString, finalize)
{
+# ifdef OPENVRML_JS_FINALIZEOP_USES_FREEOP
+ static JSContext * const cx = 0;
+# endif
MFData * const mfdata = static_cast<MFData *>(js_get_private(cx, obj));
if (mfdata) {
RemoveRoots(cx, mfdata->array);
@@ -7684,12 +7724,11 @@
// Construct the result object.
//
JSObject * const robj = js_construct_object(cx, &Row::jsclass, 0,
- JS_GetParent(cx, obj));
+ js_get_parent(cx, obj));
if (!robj) { return JS_FALSE; }
float (&row)[4] = (*thisMat)[jspropertyop_id_to_int(id)];
- js_set_private(cx, robj, &row));
- *vp = OBJECT_TO_JSVAL(robj);
+ js_set_private(cx, robj, &row);
}
return JS_TRUE;
}
@@ -7869,8 +7908,8 @@
JSObject * const robj =
js_construct_object(cx, &VrmlMatrix::jsclass, 0,
- JS_GetParent(cx,
- OPENVRML_JS_THIS_OBJECT(cx, vp)));
+ js_get_parent(cx,
+ OPENVRML_JS_THIS_OBJECT(cx, vp)));
if (!robj) { return JS_FALSE; }
const mat4f * const thisMat =
@@ -7891,8 +7930,8 @@
JSObject * const robj =
js_construct_object(cx, &VrmlMatrix::jsclass, 0,
- JS_GetParent(cx,
- OPENVRML_JS_THIS_OBJECT(cx, vp)));
+ js_get_parent(cx,
+ OPENVRML_JS_THIS_OBJECT(cx, vp)));
if (!robj) { return JS_FALSE; }
const mat4f * const thisMat =
@@ -7935,8 +7974,8 @@
//
JSObject * const robj =
js_construct_object(cx, &VrmlMatrix::jsclass, 0,
- JS_GetParent(cx,
- OPENVRML_JS_THIS_OBJECT(cx, vp)));
+ js_get_parent(cx,
+ OPENVRML_JS_THIS_OBJECT(cx, vp)));
if (!robj) { return JS_FALSE; }
void * robj_private_data = js_get_private(cx, robj);
assert(robj_private_data);
@@ -7975,8 +8014,8 @@
//
JSObject * const robj =
js_construct_object(cx, &VrmlMatrix::jsclass, 0,
- JS_GetParent(cx,
- OPENVRML_JS_THIS_OBJECT(cx, vp)));
+ js_get_parent(cx,
+ OPENVRML_JS_THIS_OBJECT(cx, vp)));
if (!robj) { return JS_FALSE; }
void * private_data = js_get_private(cx, robj);
assert(private_data);
@@ -8022,7 +8061,7 @@
//
static JSObject * const proto = 0;
JSObject * const parent =
- JS_GetParent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
+ js_get_parent(cx, OPENVRML_JS_THIS_OBJECT(cx, vp));
JSObject * const robj =
js_construct_object(cx, &SFVec3f::jsclass, proto, parent);
if (!robj) { return JS_FALSE; }
@@ -8073,8 +8112,8 @@
//
JSObject * const robj =
js_construct_object(cx, &SFVec3f::jsclass, 0,
- JS_GetParent(cx,
- OPENVRML_JS_THIS_OBJECT(cx, vp)));
+ js_get_parent(cx,
+ OPENVRML_JS_THIS_OBJECT(cx, vp)));
if (!robj) { return JS_FALSE; }
assert(js_get_private(cx, robj));
@@ -8113,9 +8152,11 @@
return JS_TRUE;
}
- void VrmlMatrix::finalize(JSContext * const cx, JSObject * const obj)
- OPENVRML_NOTHROW
+ OPENVRML_DEFINE_MEMBER_JSFINALIZEOP(VrmlMatrix, finalize)
{
+# ifdef OPENVRML_JS_FINALIZEOP_USES_FREEOP
+ static JSContext * const cx = 0;
+# endif
delete static_cast<openvrml::mat4f *>(js_get_private(cx, obj));
js_set_private(cx, obj, 0);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|