[mongodb] Clean up mongodb-src-r2.0.2-js.patch and fix #787246
Nathaniel McCallum
npmccallum at fedoraproject.org
Fri Feb 3 17:16:11 UTC 2012
commit 291d6114f0a60a10169410531150067ff11d2fb4
Author: Nathaniel McCallum <nathaniel at themccallums.org>
Date: Fri Feb 3 12:13:25 2012 -0500
Clean up mongodb-src-r2.0.2-js.patch and fix #787246
mongodb-src-r2.0.2-js.patch | 940 +++++++++++++++++++------------------------
mongodb.spec | 5 +-
2 files changed, 427 insertions(+), 518 deletions(-)
---
diff --git a/mongodb-src-r2.0.2-js.patch b/mongodb-src-r2.0.2-js.patch
index f3c6dd3..66855f3 100644
--- a/mongodb-src-r2.0.2-js.patch
+++ b/mongodb-src-r2.0.2-js.patch
@@ -11,16 +11,20 @@ index 1e9684d..c555ec7 100644
# undef SUPPORT_UCP
# define SUPPORT_UCP
diff --git a/scripting/engine_spidermonkey.cpp b/scripting/engine_spidermonkey.cpp
-index 64fe21c..d496369 100644
+index 64fe21c..2fa2fcd 100644
--- a/scripting/engine_spidermonkey.cpp
+++ b/scripting/engine_spidermonkey.cpp
-@@ -25,6 +25,13 @@
+@@ -25,6 +25,17 @@
#define assert MONGO_assert
#endif
+#if JS_VERSION < 185
+#define JS_StrictPropertyStub JS_PropertyStub
+#define FUNCSPEC(name, call, nargs, flags) { name, call, nargs, flags, 0 }
++#define JS_RVAL(cx, rval) *rval
++#define JS_SET_RVAL(cx, rval, v) JS_RVAL(cx, rval) = v
++#define JS_AddNamedObjectRoot JS_AddNamedRoot
++#define JS_RemoveObjectRoot JS_RemoveRoot
+#else
+#define FUNCSPEC(name, call, nargs, flags) { name, call, nargs, flags }
+#endif
@@ -28,39 +32,25 @@ index 64fe21c..d496369 100644
#define smuassert( cx , msg , val ) \
if ( ! ( val ) ){ \
JS_ReportError( cx , msg ); \
-@@ -192,6 +199,7 @@ namespace mongo {
+@@ -192,8 +203,15 @@ namespace mongo {
}
string toString( JSString * so ) {
+- jschar * s = JS_GetStringChars( so );
+- size_t srclen = JS_GetStringLength( so );
++ size_t srclen = 0;
++ const jschar * s = NULL;
++
+#if JS_VERSION < 185
- jschar * s = JS_GetStringChars( so );
- size_t srclen = JS_GetStringLength( so );
- if( srclen == 0 )
-@@ -218,9 +226,21 @@ namespace mongo {
-
- string ss( dst , len );
- free( dst );
++ srclen = JS_GetStringLength( so );
++ s = JS_GetStringChars( so );
+#else
-+ char * s = (char *)JS_EncodeString(_context, so );
-+ size_t srclen = strlen( s );
-+ if( srclen == 0 ) {
-+ JS_free(_context, s);
-+ return "";
-+ }
-+
-+ string ss( s, srclen );
-+ JS_free(_context, s);
++ s = JS_GetStringCharsAndLength( _context , so , &srclen );
+#endif
-+
- if ( !JS_CStringsAreUTF8() )
-- for( string::const_iterator i = ss.begin(); i != ss.end(); ++i )
-- uassert( 10213 , "non ascii character detected", (unsigned char)(*i) <= 127 );
-+ for( string::const_iterator i = ss.begin(); i != ss.end(); ++i )
-+ uassert( 10213 , "non ascii character detected", (unsigned char)(*i) <= 127 );
- return ss;
- }
+ if( srclen == 0 )
+ return "";
-@@ -364,7 +384,7 @@ namespace mongo {
+@@ -364,7 +382,7 @@ namespace mongo {
case JSTYPE_OBJECT: {
JSObject * o = JSVAL_TO_OBJECT( val );
@@ -69,7 +59,20 @@ index 64fe21c..d496369 100644
b.appendNull( name );
}
else if ( ! appendSpecialDBObject( this , b , name , val , o ) ) {
-@@ -649,7 +669,13 @@ namespace mongo {
+@@ -423,12 +441,9 @@ namespace mongo {
+ return true;
+ }
+
+- void addRoot( JSFunction * f , const char * name );
+-
+ JSFunction * compileFunction( const char * code, JSObject * assoc = 0 ) {
+ const char * gcName = "unknown";
+ JSFunction * f = _compileFunction( code , assoc , gcName );
+- //addRoot( f , gcName );
+ return f;
+ }
+
+@@ -649,7 +664,13 @@ namespace mongo {
flags++;
}
@@ -84,7 +87,7 @@ index 64fe21c..d496369 100644
assert( r );
return OBJECT_TO_JSVAL( r );
}
-@@ -670,7 +696,11 @@ namespace mongo {
+@@ -670,7 +691,11 @@ namespace mongo {
return OBJECT_TO_JSVAL( JS_GetFunctionObject( func ) );
}
case Date:
@@ -96,7 +99,18 @@ index 64fe21c..d496369 100644
case MinKey:
return OBJECT_TO_JSVAL( JS_NewObject( _context , &minkey_class , 0 , 0 ) );
-@@ -801,7 +831,7 @@ namespace mongo {
+@@ -792,16 +817,16 @@ namespace mongo {
+ }
+
+ JSBool bson_enumerate( JSContext *cx, JSObject *obj, JSIterateOp enum_op, jsval *statep, jsid *idp ) {
+-
+- BSONHolder * o = GETHOLDER( cx , obj );
++ Convertor c(cx);
+
+ if ( enum_op == JSENUMERATE_INIT ) {
++ BSONHolder * o = GETHOLDER( cx , obj );
+ if ( o ) {
+ BSONFieldIterator * it = o->it();
*statep = PRIVATE_TO_JSVAL( it );
}
else {
@@ -105,16 +119,22 @@ index 64fe21c..d496369 100644
}
if ( idp )
*idp = JSVAL_ZERO;
-@@ -810,7 +840,7 @@ namespace mongo {
+@@ -809,20 +834,19 @@ namespace mongo {
+ }
BSONFieldIterator * it = (BSONFieldIterator*)JSVAL_TO_PRIVATE( *statep );
- if ( ! it ) {
+- if ( ! it ) {
- *statep = 0;
++ if ( ! it || *statep == JSVAL_NULL ) {
+ *statep = JSVAL_NULL;
return JS_TRUE;
}
-@@ -822,7 +852,7 @@ namespace mongo {
+ if ( enum_op == JSENUMERATE_NEXT ) {
+ if ( it->more() ) {
+ string name = it->next();
+- Convertor c(cx);
+ assert( JS_ValueToId( cx , c.toval( name.c_str() ) , idp ) );
}
else {
delete it;
@@ -123,26 +143,25 @@ index 64fe21c..d496369 100644
}
return JS_TRUE;
}
-@@ -837,7 +867,11 @@ namespace mongo {
+@@ -837,7 +861,11 @@ namespace mongo {
return JS_FALSE;
}
-- JSBool noaccess( JSContext *cx, JSObject *obj, jsval idval, jsval *vp) {
-+#if JS_VERSION >= 185
-+ JSBool noaccess_strict( JSContext *cx, JSObject *obj, jsid id, JSBool strict, jsval *vp) {
++#if JS_VERSION < 185
+ JSBool noaccess( JSContext *cx, JSObject *obj, jsval idval, jsval *vp) {
+#else
-+ JSBool noaccess( JSContext *cx, JSObject *obj, jsval idval, jsval *vp) {
++ JSBool noaccess( JSContext *cx, JSObject *obj, jsid id, jsval *vp) {
+#endif
BSONHolder * holder = GETHOLDER( cx , obj );
if ( ! holder ) {
// in init code still
-@@ -849,14 +883,29 @@ namespace mongo {
+@@ -849,14 +877,29 @@ namespace mongo {
return JS_FALSE;
}
+#if JS_VERSION >= 185
-+ JSBool noaccess( JSContext *cx, JSObject *obj, jsid id, jsval *vp) {
-+ return noaccess_strict(cx, obj, id, JS_FALSE, vp);
++ JSBool noaccess_strict( JSContext *cx, JSObject *obj, jsid id, JSBool strict, jsval *vp) {
++ return noaccess(cx, obj, id, vp);
+ }
+#endif
+
@@ -162,12 +181,12 @@ index 64fe21c..d496369 100644
+#if JS_VERSION < 185
JSBool bson_cons( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval ) {
+#else
-+ JSBool bson_cons( JSContext *cx, uintN argc, jsval *vp ) {
++ JSBool bson_cons( JSContext *cx, uintN argc, jsval *rval ) {
+#endif
cerr << "bson_cons : shouldn't be here!" << endl;
JS_ReportError( cx , "can't construct bson object" );
return JS_FALSE;
-@@ -866,7 +915,11 @@ namespace mongo {
+@@ -866,7 +909,13 @@ namespace mongo {
{ 0 }
};
@@ -175,23 +194,13 @@ index 64fe21c..d496369 100644
JSBool bson_add_prop( JSContext *cx, JSObject *obj, jsval idval, jsval *vp) {
+#else
+ JSBool bson_add_prop( JSContext *cx, JSObject *obj, jsid id, jsval *vp) {
++ jsval idval;
++ assert(JS_IdToValue(cx, id, &idval));
+#endif
BSONHolder * holder = GETHOLDER( cx , obj );
if ( ! holder ) {
// static init
-@@ -874,7 +927,11 @@ namespace mongo {
- }
- if ( ! holder->_inResolve ) {
- Convertor c(cx);
-+#if JS_VERSION < 185
- string name = c.toString( idval );
-+#else
-+ string name = c.toString( JSID_TO_STRING(id) );
-+#endif
- if ( holder->_obj[name].eoo() ) {
- holder->_extra.push_back( name );
- }
-@@ -883,8 +940,11 @@ namespace mongo {
+@@ -883,8 +932,13 @@ namespace mongo {
return JS_TRUE;
}
@@ -199,42 +208,28 @@ index 64fe21c..d496369 100644
+#if JS_VERSION < 185
JSBool mark_modified( JSContext *cx, JSObject *obj, jsval idval, jsval *vp) {
+#else
-+ JSBool mark_modified( JSContext *cx, JSObject *obj, jsid id, JSBool strict, jsval *vp) {
++ JSBool mark_modified( JSContext *cx, JSObject *obj, jsid id, JSBool strict, jsval *vp) {
++ jsval idval;
++ assert(JS_IdToValue(cx, id, &idval));
+#endif
Convertor c(cx);
BSONHolder * holder = GETHOLDER( cx , obj );
if ( !holder ) // needed when we're messing with DBRef.prototype
-@@ -892,17 +952,29 @@ namespace mongo {
- if ( holder->_inResolve )
- return JS_TRUE;
- holder->_modified = true;
-+#if JS_VERSION < 185
- holder->_removed.erase( c.toString( idval ) );
-+#else
-+ holder->_removed.erase( c.toString( JSID_TO_STRING(id) ) );
-+#endif
+@@ -896,7 +950,13 @@ namespace mongo {
return JS_TRUE;
}
+#if JS_VERSION < 185
JSBool mark_modified_remove( JSContext *cx, JSObject *obj, jsval idval, jsval *vp) {
+#else
-+ JSBool mark_modified_remove( JSContext *cx, JSObject *obj, jsid id, jsval *vp) {
++ JSBool mark_modified_remove( JSContext *cx, JSObject *obj, jsid id, jsval *vp) {
++ jsval idval;
++ assert(JS_IdToValue(cx, id, &idval));
+#endif
Convertor c(cx);
BSONHolder * holder = GETHOLDER( cx , obj );
if ( holder->_inResolve )
- return JS_TRUE;
- holder->_modified = true;
-+#if JS_VERSION < 185
- holder->_removed.insert( c.toString( idval ) );
-+#else
-+ holder->_removed.insert( c.toString( JSID_TO_STRING(id) ) );
-+#endif
- return JS_TRUE;
- }
-
-@@ -915,14 +987,13 @@ namespace mongo {
+@@ -915,14 +975,13 @@ namespace mongo {
static JSClass global_class = {
"global", JSCLASS_GLOBAL_FLAGS,
@@ -251,15 +246,12 @@ index 64fe21c..d496369 100644
JSObject * o = JS_NewObject( cx , &bindata_class , 0 , 0 );
CHECKNEWOBJECT(o,_context,"Bindata_BinData1");
int len = s.size() / 2;
-@@ -936,12 +1007,21 @@ namespace mongo {
+@@ -936,12 +995,17 @@ namespace mongo {
Convertor c(cx);
c.setProperty( o, "len", c.toval((double)len) );
c.setProperty( o, "type", c.toval((double)subtype) );
-+#if JS_VERSION < 185
- *rval = OBJECT_TO_JSVAL( o );
-+#else
+- *rval = OBJECT_TO_JSVAL( o );
+ JS_SET_RVAL(cx, rval, OBJECT_TO_JSVAL( o ));
-+#endif
delete data;
return JS_TRUE;
}
@@ -267,13 +259,13 @@ index 64fe21c..d496369 100644
+#if JS_VERSION < 185
JSBool _HexData( JSContext * cx , JSObject * obj , uintN argc, jsval *argv, jsval *rval ) {
+#else
-+ JSBool _HexData( JSContext * cx , uintN argc, jsval *rval ) {
-+ jsval *argv = JS_ARGV(cx, rval);
++ JSBool _HexData( JSContext * cx , uintN argc, jsval *rval ) {
++ jsval *argv = JS_ARGV(cx, rval);
+#endif
Convertor c( cx );
if ( argc != 2 ) {
JS_ReportError( cx , "HexData needs 2 arguments -- HexData(subtype,hexstring)" );
-@@ -956,7 +1036,12 @@ namespace mongo {
+@@ -956,7 +1020,12 @@ namespace mongo {
return hexToBinData(cx, rval, type, s);
}
@@ -281,12 +273,12 @@ index 64fe21c..d496369 100644
JSBool _UUID( JSContext * cx , JSObject * obj , uintN argc, jsval *argv, jsval *rval ) {
+#else
+ JSBool _UUID( JSContext * cx , uintN argc, jsval *rval ) {
-+ jsval *argv = JS_ARGV(cx, rval);
++ jsval *argv = JS_ARGV(cx, rval);
+#endif
Convertor c( cx );
if ( argc != 1 ) {
JS_ReportError( cx , "UUID needs argument -- UUID(hexstring)" );
-@@ -970,7 +1055,12 @@ namespace mongo {
+@@ -970,7 +1039,12 @@ namespace mongo {
return hexToBinData(cx, rval, 3, s);
}
@@ -294,12 +286,12 @@ index 64fe21c..d496369 100644
JSBool _MD5( JSContext * cx , JSObject * obj , uintN argc, jsval *argv, jsval *rval ) {
+#else
+ JSBool _MD5( JSContext * cx , uintN argc, jsval *rval ) {
-+ jsval *argv = JS_ARGV(cx, rval);
++ jsval *argv = JS_ARGV(cx, rval);
+#endif
Convertor c( cx );
if ( argc != 1 ) {
JS_ReportError( cx , "MD5 needs argument -- MD5(hexstring)" );
-@@ -984,7 +1074,12 @@ namespace mongo {
+@@ -984,7 +1058,13 @@ namespace mongo {
return hexToBinData(cx, rval, 5, s);
}
@@ -307,50 +299,36 @@ index 64fe21c..d496369 100644
JSBool native_print( JSContext * cx , JSObject * obj , uintN argc, jsval *argv, jsval *rval ) {
+#else
+ JSBool native_print( JSContext *cx , uintN argc, jsval *rval) {
-+ jsval *argv = JS_ARGV(cx, rval);
++ jsval *argv = JS_ARGV(cx, rval);
++ JS_SET_RVAL(cx, rval, JSVAL_VOID);
+#endif
stringstream ss;
Convertor c( cx );
for ( uintN i=0; i<argc; i++ ) {
-@@ -997,7 +1092,12 @@ namespace mongo {
+@@ -997,7 +1077,13 @@ namespace mongo {
return JS_TRUE;
}
+#if JS_VERSION < 185
JSBool native_helper( JSContext *cx , JSObject *obj , uintN argc, jsval *argv , jsval *rval ) {
+#else
-+ JSBool native_helper( JSContext *cx , uintN argc, jsval *vp ) {
-+ JSObject *obj = JS_THIS_OBJECT(cx, vp);
++ JSBool native_helper( JSContext *cx , uintN argc, jsval *rval ) {
++ JSObject *obj = JS_THIS_OBJECT(cx, rval);
++ jsval *argv = JS_ARGV(cx, rval);
+#endif
Convertor c(cx);
NativeFunction func = (NativeFunction)((long long)c.getNumber( obj , "x" ) );
-@@ -1007,6 +1107,9 @@ namespace mongo {
- BSONObj a;
- if ( argc > 0 ) {
- BSONObjBuilder args;
-+#if JS_VERSION >= 185
-+ jsval *argv = JS_ARGV(cx, vp);
-+#endif
- for ( uintN i=0; i<argc; i++ ) {
- c.append( args , args.numStr( i ) , argv[i] );
- }
-@@ -1024,38 +1127,58 @@ namespace mongo {
+@@ -1024,38 +1110,51 @@ namespace mongo {
}
if ( out.isEmpty() ) {
-+#if JS_VERSION < 185
- *rval = JSVAL_VOID;
-+#else
-+ JS_SET_RVAL(cx, vp, JSVAL_VOID);
-+#endif
+- *rval = JSVAL_VOID;
++ JS_SET_RVAL(cx, rval, JSVAL_VOID);
}
else {
-+#if JS_VERSION < 185
- *rval = c.toval( out.firstElement() );
-+#else
-+ JS_SET_RVAL(cx, vp, c.toval( out.firstElement() ));
-+#endif
+- *rval = c.toval( out.firstElement() );
++ JS_SET_RVAL(cx, rval, c.toval( out.firstElement() ));
}
return JS_TRUE;
@@ -365,7 +343,8 @@ index 64fe21c..d496369 100644
+#if JS_VERSION < 185
JSBool native_gc( JSContext *cx , JSObject *obj , uintN argc, jsval *argv , jsval *rval ) {
+#else
-+ JSBool native_gc( JSContext *cx , uintN argc, jsval *vp ) {
++ JSBool native_gc( JSContext *cx , uintN argc, jsval *rval ) {
++ JS_SET_RVAL(cx, rval, JSVAL_VOID);
+#endif
JS_GC( cx );
return JS_TRUE;
@@ -380,14 +359,14 @@ index 64fe21c..d496369 100644
- { "MD5", &_MD5, 0, 0, 0 } ,
- { "HexData", &_HexData, 0, 0, 0 } ,
- { 0 , 0 , 0 , 0 , 0 }
-+ FUNCSPEC( "print" , &native_print , 0 , 0 ),
-+ FUNCSPEC( "nativeHelper" , &native_helper , 1 , 0 ),
-+ FUNCSPEC( "load" , &native_load , 1 , 0 ),
-+ FUNCSPEC( "gc" , &native_gc , 1 , 0 ),
-+ FUNCSPEC( "UUID", &_UUID, 0, 0 ),
-+ FUNCSPEC( "MD5", &_MD5, 0, 0 ),
-+ FUNCSPEC( "HexData", &_HexData, 0, 0 ),
-+ FUNCSPEC( NULL , NULL , 0 , 0 ),
++ FUNCSPEC( "print" , &native_print , 0 , 0 ),
++ FUNCSPEC( "nativeHelper" , &native_helper , 1 , 0 ),
++ FUNCSPEC( "load" , &native_load , 1 , 0 ),
++ FUNCSPEC( "gc" , &native_gc , 1 , 0 ),
++ FUNCSPEC( "UUID", &_UUID, 0, 0 ),
++ FUNCSPEC( "MD5", &_MD5, 0, 0 ),
++ FUNCSPEC( "HexData", &_HexData, 0, 0 ),
++ FUNCSPEC( NULL , NULL , 0 , 0 ),
};
// ----END global helpers ----
@@ -397,33 +376,27 @@ index 64fe21c..d496369 100644
+#if JS_VERSION < 185
JSBool bson_get_size(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
+#else
-+ JSBool bson_get_size(JSContext * cx , uintN argc, jsval *vp ) {
-+ jsval *argv = JS_ARGV(cx, vp);
++ JSBool bson_get_size(JSContext * cx , uintN argc, jsval *rval ) {
++ jsval *argv = JS_ARGV(cx, rval);
+#endif
if ( argc != 1 || !JSVAL_IS_OBJECT( argv[ 0 ] ) ) {
JS_ReportError( cx , "bsonsize requires one valid object" );
return JS_FALSE;
-@@ -1064,7 +1187,11 @@ namespace mongo {
+@@ -1064,7 +1163,7 @@ namespace mongo {
Convertor c(cx);
if ( argv[0] == JSVAL_VOID || argv[0] == JSVAL_NULL ) {
-+#if JS_VERSION < 185
- *rval = c.toval( 0.0 );
-+#else
-+ JS_SET_RVAL(cx, vp, c.toval( 0.0 ));
-+#endif
+- *rval = c.toval( 0.0 );
++ JS_SET_RVAL(cx, rval, c.toval( 0.0 ));
return JS_TRUE;
}
-@@ -1084,18 +1211,25 @@ namespace mongo {
+@@ -1084,18 +1183,23 @@ namespace mongo {
size = temp.objsize();
}
-+#if JS_VERSION < 185
- *rval = c.toval( size );
-+#else
-+ JS_SET_RVAL(cx, vp, c.toval( size ));
-+#endif
+- *rval = c.toval( size );
++ JS_SET_RVAL(cx, rval, c.toval( size ));
return JS_TRUE;
}
@@ -436,27 +409,28 @@ index 64fe21c..d496369 100644
// end Object helpers
-
+- JSBool resolveBSONField( JSContext *cx, JSObject *obj, jsval id, uintN flags, JSObject **objp ) {
+#if JS_VERSION < 185
- JSBool resolveBSONField( JSContext *cx, JSObject *obj, jsval id, uintN flags, JSObject **objp ) {
++ JSBool resolveBSONField( JSContext *cx, JSObject *obj, jsval idval, uintN flags, JSObject **objp ) {
+#else
-+ JSBool resolveBSONField( JSContext *cx, JSObject *obj, jsid id, uintN flags, JSObject **objp ) {
++ JSBool resolveBSONField( JSContext *cx, JSObject *obj, jsid id, uintN flags, JSObject **objp ) {
++ jsval idval;
++ assert(JS_IdToValue(cx, id, &idval));
+#endif
assert( JS_EnterLocalRootScope( cx ) );
Convertor c( cx );
-@@ -1108,7 +1242,11 @@ namespace mongo {
+@@ -1108,8 +1212,7 @@ namespace mongo {
}
holder->check();
-+#if JS_VERSION < 185
- string s = c.toString( id );
-+#else
-+ string s = c.toString( JSID_TO_STRING(id) );
-+#endif
-
+- string s = c.toString( id );
+-
++ string s = c.toString( idval );
BSONElement e = holder->_obj[ s.c_str() ];
-@@ -1155,7 +1293,7 @@ namespace mongo {
+ if ( e.type() == EOO || holder->_removed.count( s ) ) {
+@@ -1155,7 +1258,7 @@ namespace mongo {
public:
SMEngine() {
@@ -465,7 +439,7 @@ index 64fe21c..d496369 100644
JS_SetCStringsAreUTF8();
#endif
-@@ -1225,7 +1363,11 @@ namespace mongo {
+@@ -1225,7 +1328,11 @@ namespace mongo {
//JS_SetVersion( _context , JSVERSION_LATEST); TODO
JS_SetErrorReporter( _context , errorReporter );
@@ -477,85 +451,70 @@ index 64fe21c..d496369 100644
massert( 10432 , "JS_NewObject failed for global" , _global );
JS_SetGlobalObject( _context , _global );
massert( 10433 , "js init failed" , JS_InitStandardClasses( _context , _global ) );
-@@ -1245,13 +1387,19 @@ namespace mongo {
+@@ -1245,13 +1352,8 @@ namespace mongo {
smlock;
uassert( 10223 , "deleted SMScope twice?" , _convertor );
-+#if JS_VERSION < 185
- for ( list<void*>::iterator i=_roots.begin(); i != _roots.end(); i++ ) {
- JS_RemoveRoot( _context , *i );
- }
- _roots.clear();
-+#endif
-
+- for ( list<void*>::iterator i=_roots.begin(); i != _roots.end(); i++ ) {
+- JS_RemoveRoot( _context , *i );
+- }
+- _roots.clear();
+-
if ( _this ) {
-+#if JS_VERSION < 185
- JS_RemoveRoot( _context , &_this );
-+#else
+- JS_RemoveRoot( _context , &_this );
+ JS_RemoveObjectRoot( _context , &_this );
-+#endif
_this = 0;
}
-@@ -1273,17 +1421,23 @@ namespace mongo {
+@@ -1273,18 +1375,13 @@ namespace mongo {
assert( _convertor );
return;
if ( _this ) {
-+#if JS_VERSION < 185
- JS_RemoveRoot( _context , &_this );
-+#else
+- JS_RemoveRoot( _context , &_this );
+ JS_RemoveObjectRoot( _context , &_this );
-+#endif
_this = 0;
}
currentScope.reset( this );
_error = "";
}
-+#if JS_VERSION < 185
- void addRoot( void * root , const char * name ) {
- JS_AddNamedRoot( _context , root , name );
- _roots.push_back( root );
- }
-+#endif
-
+- void addRoot( void * root , const char * name ) {
+- JS_AddNamedRoot( _context , root , name );
+- _roots.push_back( root );
+- }
+-
void init( const BSONObj * data ) {
smlock;
-@@ -1422,13 +1576,21 @@ namespace mongo {
+ if ( ! data )
+@@ -1422,13 +1519,13 @@ namespace mongo {
void setThis( const BSONObj * obj ) {
smlock;
if ( _this ) {
-+#if JS_VERSION < 185
- JS_RemoveRoot( _context , &_this );
-+#else
+- JS_RemoveRoot( _context , &_this );
+ JS_RemoveObjectRoot( _context , &_this );
-+#endif
_this = 0;
}
if ( obj ) {
_this = _convertor->toJSObject( obj );
-+#if JS_VERSION < 185
- JS_AddNamedRoot( _context , &_this , "scope this" );
-+#else
-+ JS_AddObjectRoot( _context , &_this );
-+#endif
+- JS_AddNamedRoot( _context , &_this , "scope this" );
++ JS_AddNamedObjectRoot( _context , &_this , "scope this" );
}
}
-@@ -1483,7 +1645,11 @@ namespace mongo {
+@@ -1483,7 +1580,11 @@ namespace mongo {
}
+#if JS_VERSION < 185
static JSBool interrupt( JSContext *cx, JSScript *script ) {
+#else
-+ static JSBool interrupt( JSContext *cx, JSObject *script ) {
++ static JSBool interrupt( JSContext *cx, JSObject *script ) {
+#endif
return _interrupt( cx );
}
-@@ -1494,7 +1660,7 @@ namespace mongo {
+@@ -1494,7 +1595,7 @@ namespace mongo {
spec->start = boost::posix_time::microsec_clock::local_time();
spec->count = 0;
JS_SetContextPrivate( _context, (void*)spec );
@@ -564,7 +523,7 @@ index 64fe21c..d496369 100644
JS_SetOperationCallback( _context, _interrupt );
#else
JS_SetBranchCallback( _context, interrupt );
-@@ -1504,7 +1670,7 @@ namespace mongo {
+@@ -1504,7 +1605,7 @@ namespace mongo {
void uninstallInterrupt( int timeoutMs ) {
if ( timeoutMs != 0 || ScriptEngine::haveCheckInterruptCallback() ) {
@@ -573,35 +532,48 @@ index 64fe21c..d496369 100644
JS_SetOperationCallback( _context , 0 );
#else
JS_SetBranchCallback( _context, 0 );
-@@ -1678,7 +1844,12 @@ namespace mongo {
+@@ -1649,7 +1750,6 @@ namespace mongo {
+ JSObject * _this;
+
+ string _error;
+- list<void*> _roots;
+
+ bool _externalSetup;
+ bool _localConnect;
+@@ -1678,7 +1778,13 @@ namespace mongo {
}
}
+#if JS_VERSION < 185
JSBool native_load( JSContext *cx , JSObject *obj , uintN argc, jsval *argv , jsval *rval ) {
+#else
-+ JSBool native_load( JSContext * cx , uintN argc, jsval *vp ) {
-+ jsval *argv = JS_ARGV(cx, vp);
++ JSBool native_load( JSContext * cx , uintN argc, jsval *rval ) {
++ jsval *argv = JS_ARGV(cx, rval);
++ JS_SET_RVAL(cx, rval, JSVAL_VOID);
+#endif
Convertor c(cx);
Scope * s = currentScope.get();
-@@ -1732,6 +1903,7 @@ namespace mongo {
+@@ -1731,19 +1837,6 @@ namespace mongo {
+ Scope * SMEngine::createScope() {
return new SMScope();
}
-
-+#if JS_VERSION < 185
- void Convertor::addRoot( JSFunction * f , const char * name ) {
- if ( ! f )
- return;
-@@ -1743,6 +1915,7 @@ namespace mongo {
- assert( o );
- scope->addRoot( &o , name );
- }
-+#endif
-
+-
+- void Convertor::addRoot( JSFunction * f , const char * name ) {
+- if ( ! f )
+- return;
+-
+- SMScope * scope = currentScope.get();
+- uassert( 10229 , "need a scope" , scope );
+-
+- JSObject * o = JS_GetFunctionObject( f );
+- assert( o );
+- scope->addRoot( &o , name );
+- }
+-
}
+ #include "sm_db.cpp"
diff --git a/scripting/engine_spidermonkey.h b/scripting/engine_spidermonkey.h
index 9fd430d..b90dae7 100644
--- a/scripting/engine_spidermonkey.h
@@ -631,7 +603,7 @@ index 9fd430d..b90dae7 100644
// mongo
diff --git a/scripting/sm_db.cpp b/scripting/sm_db.cpp
-index 2a9169b..6bcf01f 100644
+index 2a9169b..2b4c4ec 100644
--- a/scripting/sm_db.cpp
+++ b/scripting/sm_db.cpp
@@ -22,6 +22,11 @@
@@ -656,13 +628,13 @@ index 2a9169b..6bcf01f 100644
+ extern JSClass internal_cursor_class;
+
+ JSBool internal_cursor_constructor( JSContext *cx, uintN argc, jsval *vp ) {
-+ JSObject *obj = JS_NewObject(cx, &internal_cursor_class, NULL, NULL);
-+ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
++ JSObject *obj = JS_NewObject(cx, &internal_cursor_class, NULL, NULL);
++ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
+#endif
uassert( 10236 , "no args to internal_cursor_constructor" , argc == 0 );
assert( JS_SetPrivate( cx , obj , 0 ) ); // just for safety
return JS_TRUE;
-@@ -93,10 +106,20 @@ namespace mongo {
+@@ -93,10 +106,16 @@ namespace mongo {
}
}
@@ -670,57 +642,48 @@ index 2a9169b..6bcf01f 100644
+#if JS_VERSION < 185
JSBool internal_cursor_hasNext(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
+#else
-+ JSBool internal_cursor_hasNext(JSContext *cx, uintN argc, jsval *vp) {
-+ JSObject *obj = JS_THIS_OBJECT(cx, vp);
++ JSBool internal_cursor_hasNext(JSContext *cx, uintN argc, jsval *rval) {
++ JSObject *obj = JS_THIS_OBJECT(cx, rval);
+#endif
DBClientCursor *cursor = getCursor( cx, obj );
try {
-+#if JS_VERSION < 185
- *rval = cursor->more() ? JSVAL_TRUE : JSVAL_FALSE;
-+#else
-+ JS_SET_RVAL(cx, vp, cursor->more() ? JSVAL_TRUE : JSVAL_FALSE);
-+#endif
+- *rval = cursor->more() ? JSVAL_TRUE : JSVAL_FALSE;
++ JS_SET_RVAL(cx, rval, cursor->more() ? JSVAL_TRUE : JSVAL_FALSE);
}
catch ( std::exception& e ) {
JS_ReportError( cx , e.what() );
-@@ -105,14 +128,28 @@ namespace mongo {
+@@ -105,14 +124,24 @@ namespace mongo {
return JS_TRUE;
}
+#if JS_VERSION < 185
JSBool internal_cursor_objsLeftInBatch(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
+#else
-+ JSBool internal_cursor_objsLeftInBatch(JSContext *cx, uintN argc, jsval *vp) {
-+ JSObject *obj = JS_THIS_OBJECT(cx, vp);
++ JSBool internal_cursor_objsLeftInBatch(JSContext *cx, uintN argc, jsval *rval) {
++ JSObject *obj = JS_THIS_OBJECT(cx, rval);
+#endif
DBClientCursor *cursor = getCursor( cx, obj );
Convertor c(cx);
-+#if JS_VERSION < 185
- *rval = c.toval((double) cursor->objsLeftInBatch() );
-+#else
-+ JS_SET_RVAL(cx, vp, c.toval((double) cursor->objsLeftInBatch() ));
-+#endif
+- *rval = c.toval((double) cursor->objsLeftInBatch() );
++ JS_SET_RVAL(cx, rval, c.toval((double) cursor->objsLeftInBatch() ));
return JS_TRUE;
}
+#if JS_VERSION < 185
JSBool internal_cursor_next(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
+#else
-+ JSBool internal_cursor_next(JSContext *cx, uintN argc, jsval *vp) {
-+ JSObject *obj = JS_THIS_OBJECT(cx, vp);
++ JSBool internal_cursor_next(JSContext *cx, uintN argc, jsval *rval) {
++ JSObject *obj = JS_THIS_OBJECT(cx, rval);
+#endif
DBClientCursor *cursor = getCursor( cx, obj );
BSONObj n;
-@@ -131,33 +168,48 @@ namespace mongo {
+@@ -131,33 +160,35 @@ namespace mongo {
}
Convertor c(cx);
-+#if JS_VERSION < 185
- *rval = c.toval( &n );
-+#else
-+ JS_SET_RVAL(cx, vp, c.toval( &n ));
-+#endif
+- *rval = c.toval( &n );
++ JS_SET_RVAL(cx, rval, c.toval( &n ));
return JS_TRUE;
}
@@ -729,15 +692,16 @@ index 2a9169b..6bcf01f 100644
- { "objsLeftInBatch" , internal_cursor_objsLeftInBatch , 0 , JSPROP_READONLY | JSPROP_PERMANENT, 0 } ,
- { "next" , internal_cursor_next , 0 , JSPROP_READONLY | JSPROP_PERMANENT, 0 } ,
- { 0 }
-+ FUNCSPEC( "hasNext" , internal_cursor_hasNext , 0 , JSPROP_READONLY | JSPROP_PERMANENT ),
-+ FUNCSPEC( "objsLeftInBatch" , internal_cursor_objsLeftInBatch , 0 , JSPROP_READONLY | JSPROP_PERMANENT ),
-+ FUNCSPEC( "next" , internal_cursor_next , 0 , JSPROP_READONLY | JSPROP_PERMANENT ),
-+ FUNCSPEC( NULL, NULL, 0, 0 ),
++ FUNCSPEC( "hasNext" , internal_cursor_hasNext , 0 , JSPROP_READONLY | JSPROP_PERMANENT ),
++ FUNCSPEC( "objsLeftInBatch" , internal_cursor_objsLeftInBatch , 0 , JSPROP_READONLY | JSPROP_PERMANENT ),
++ FUNCSPEC( "next" , internal_cursor_next , 0 , JSPROP_READONLY | JSPROP_PERMANENT ),
++ FUNCSPEC( NULL, NULL, 0, 0 ),
};
JSClass internal_cursor_class = {
- "InternalCursor" , JSCLASS_HAS_PRIVATE ,
+- "InternalCursor" , JSCLASS_HAS_PRIVATE ,
- JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub,
++ "InternalCursor" , JSCLASS_HAS_PRIVATE ,
+ JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_StrictPropertyStub,
JS_EnumerateStub, JS_ResolveStub , JS_ConvertStub, internal_cursor_finalize,
JSCLASS_NO_OPTIONAL_MEMBERS
@@ -746,47 +710,45 @@ index 2a9169b..6bcf01f 100644
// ------ mongo stuff ------
-
-+#if JS_VERSION < 185
- JSBool mongo_constructor( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval ) {
-+#else
-+ JSBool mongo_constructor( JSContext *cx, uintN argc, jsval *vp ) {
-+#endif
- uassert( 10237 , "mongo_constructor not implemented yet" , 0 );
- throw -1;
- }
-
+- JSBool mongo_constructor( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval ) {
+- uassert( 10237 , "mongo_constructor not implemented yet" , 0 );
+- throw -1;
+- }
+-
+#if JS_VERSION < 185
JSBool mongo_local_constructor( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval ) {
+#else
+ extern JSClass mongo_class;
+
-+ JSBool mongo_local_constructor(JSContext *cx, uintN argc, jsval *vp) {
-+ JSObject *obj = JS_NewObject(cx, &mongo_class, NULL, NULL);
-+ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
++ JSBool mongo_local_constructor(JSContext *cx, uintN argc, jsval *rval) {
++ JSObject *obj = JS_NewObject(cx, &mongo_class, NULL, NULL);
++ JS_SET_RVAL(cx, rval, OBJECT_TO_JSVAL(obj));
+#endif
Convertor c( cx );
shared_ptr< DBClientWithCommands > client( createDirectClient() );
-@@ -169,7 +221,14 @@ namespace mongo {
+@@ -169,7 +200,14 @@ namespace mongo {
return JS_TRUE;
}
+#if JS_VERSION < 185
JSBool mongo_external_constructor( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval ) {
+#else
-+ JSBool mongo_external_constructor(JSContext *cx, uintN argc, jsval *vp ) {
-+ jsval *argv = JS_ARGV(cx, vp);
-+ JSObject *obj = JS_NewObject(cx, &mongo_class, NULL, NULL);
-+ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
++ JSBool mongo_external_constructor(JSContext *cx, uintN argc, jsval *rval ) {
++ jsval *argv = JS_ARGV(cx, rval);
++ JSObject *obj = JS_NewObject(cx, &mongo_class, NULL, NULL);
++ JS_SET_RVAL(cx, rval, OBJECT_TO_JSVAL(obj));
+#endif
Convertor c( cx );
smuassert( cx , "0 or 1 args to Mongo" , argc <= 1 );
-@@ -225,12 +284,18 @@ namespace mongo {
+@@ -224,13 +262,19 @@ namespace mongo {
+ }
JSClass mongo_class = {
- "Mongo" , JSCLASS_HAS_PRIVATE | JSCLASS_NEW_RESOLVE ,
+- "Mongo" , JSCLASS_HAS_PRIVATE | JSCLASS_NEW_RESOLVE ,
- JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub,
++ "Mongo" , JSCLASS_HAS_PRIVATE ,
+ JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_StrictPropertyStub,
JS_EnumerateStub, JS_ResolveStub , JS_ConvertStub, mongo_finalize,
JSCLASS_NO_OPTIONAL_MEMBERS
@@ -795,69 +757,65 @@ index 2a9169b..6bcf01f 100644
+#if JS_VERSION < 185
JSBool mongo_find(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
+#else
-+ JSBool mongo_find(JSContext *cx, uintN argc, jsval *vp) {
-+ jsval *argv = JS_ARGV(cx, vp);
-+ JSObject *obj = JS_THIS_OBJECT(cx, vp);
++ JSBool mongo_find(JSContext *cx, uintN argc, jsval *rval) {
++ jsval *argv = JS_ARGV(cx, rval);
++ JSObject *obj = JS_THIS_OBJECT(cx, rval);
+#endif
smuassert( cx , "mongo_find needs 7 args" , argc == 7 );
shared_ptr< DBClientWithCommands > * connHolder = (shared_ptr< DBClientWithCommands >*)JS_GetPrivate( cx , obj );
smuassert( cx , "no connection!" , connHolder && connHolder->get() );
-@@ -260,7 +325,12 @@ namespace mongo {
+@@ -260,7 +304,7 @@ namespace mongo {
JSObject * mycursor = JS_NewObject( cx , &internal_cursor_class , 0 , 0 );
CHECKNEWOBJECT( mycursor, cx, "internal_cursor_class" );
assert( JS_SetPrivate( cx , mycursor , new CursorHolder( cursor, *connHolder ) ) );
-+#if JS_VERSION < 185
- *rval = OBJECT_TO_JSVAL( mycursor );
-+#else
-+ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL( mycursor ));
-+#endif
-+
+- *rval = OBJECT_TO_JSVAL( mycursor );
++ JS_SET_RVAL(cx, rval, OBJECT_TO_JSVAL( mycursor ));
return JS_TRUE;
}
catch ( ... ) {
-@@ -269,7 +339,13 @@ namespace mongo {
+@@ -269,7 +313,13 @@ namespace mongo {
}
}
+#if JS_VERSION < 185
JSBool mongo_update(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
+#else
-+ JSBool mongo_update(JSContext *cx, uintN argc, jsval *vp) {
-+ jsval *argv = JS_ARGV(cx, vp);
-+ JSObject *obj = JS_THIS_OBJECT(cx, vp);
++ JSBool mongo_update(JSContext *cx, uintN argc, jsval *rval) {
++ jsval *argv = JS_ARGV(cx, rval);
++ JSObject *obj = JS_THIS_OBJECT(cx, rval);
+#endif
smuassert( cx , "mongo_find needs at elast 3 args" , argc >= 3 );
smuassert( cx , "2nd param to update has to be an object" , JSVAL_IS_OBJECT( argv[1] ) );
smuassert( cx , "3rd param to update has to be an object" , JSVAL_IS_OBJECT( argv[2] ) );
-@@ -298,7 +374,13 @@ namespace mongo {
+@@ -298,7 +348,13 @@ namespace mongo {
}
}
+#if JS_VERSION < 185
JSBool mongo_insert(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
+#else
-+ JSBool mongo_insert(JSContext *cx, uintN argc, jsval *vp) {
-+ jsval *argv = JS_ARGV(cx, vp);
-+ JSObject *obj = JS_THIS_OBJECT(cx, vp);
++ JSBool mongo_insert(JSContext *cx, uintN argc, jsval *rval) {
++ jsval *argv = JS_ARGV(cx, rval);
++ JSObject *obj = JS_THIS_OBJECT(cx, rval);
+#endif
smuassert( cx , "mongo_insert needs 2 args" , argc == 2 );
smuassert( cx , "2nd param to insert has to be an object" , JSVAL_IS_OBJECT( argv[1] ) );
-@@ -333,7 +415,13 @@ namespace mongo {
+@@ -333,7 +389,13 @@ namespace mongo {
}
}
+#if JS_VERSION < 185
JSBool mongo_remove(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
+#else
-+ JSBool mongo_remove(JSContext *cx, uintN argc, jsval *vp) {
-+ jsval *argv = JS_ARGV(cx, vp);
-+ JSObject *obj = JS_THIS_OBJECT(cx, vp);
++ JSBool mongo_remove(JSContext *cx, uintN argc, jsval *rval) {
++ jsval *argv = JS_ARGV(cx, rval);
++ JSObject *obj = JS_THIS_OBJECT(cx, rval);
+#endif
smuassert( cx , "mongo_remove needs 2 or 3 arguments" , argc == 2 || argc == 3 );
smuassert( cx , "2nd param to insert has to be an object" , JSVAL_IS_OBJECT( argv[1] ) );
-@@ -369,16 +457,24 @@ namespace mongo {
+@@ -369,16 +431,24 @@ namespace mongo {
}
JSFunctionSpec mongo_functions[] = {
@@ -866,11 +824,11 @@ index 2a9169b..6bcf01f 100644
- { "insert" , mongo_insert , 0 , JSPROP_READONLY | JSPROP_PERMANENT, 0 } ,
- { "remove" , mongo_remove , 0 , JSPROP_READONLY | JSPROP_PERMANENT, 0 } ,
- { 0 }
-+ FUNCSPEC( "find" , mongo_find , 0 , JSPROP_READONLY | JSPROP_PERMANENT ),
-+ FUNCSPEC( "update" , mongo_update , 0 , JSPROP_READONLY | JSPROP_PERMANENT ),
-+ FUNCSPEC( "insert" , mongo_insert , 0 , JSPROP_READONLY | JSPROP_PERMANENT ),
-+ FUNCSPEC( "remove" , mongo_remove , 0 , JSPROP_READONLY | JSPROP_PERMANENT ),
-+ FUNCSPEC( NULL, NULL, 0, 0 ),
++ FUNCSPEC( "find" , mongo_find , 0 , JSPROP_READONLY | JSPROP_PERMANENT ),
++ FUNCSPEC( "update" , mongo_update , 0 , JSPROP_READONLY | JSPROP_PERMANENT ),
++ FUNCSPEC( "insert" , mongo_insert , 0 , JSPROP_READONLY | JSPROP_PERMANENT ),
++ FUNCSPEC( "remove" , mongo_remove , 0 , JSPROP_READONLY | JSPROP_PERMANENT ),
++ FUNCSPEC( NULL, NULL, 0, 0 ),
};
// ------------- db_collection -------------
@@ -881,35 +839,37 @@ index 2a9169b..6bcf01f 100644
+ extern JSClass db_collection_class;
+
+ JSBool db_collection_constructor(JSContext *cx, uintN argc, jsval *vp ) {
-+ jsval *argv = JS_ARGV(cx, vp);
-+ JSObject *obj = JS_NewObject(cx, &db_collection_class, NULL, NULL);
-+ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
++ jsval *argv = JS_ARGV(cx, vp);
++ JSObject *obj = JS_NewObject(cx, &db_collection_class, NULL, NULL);
++ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
+#endif
smuassert( cx , "db_collection_constructor wrong args" , argc == 4 );
assert( JS_SetProperty( cx , obj , "_mongo" , &(argv[0]) ) );
assert( JS_SetProperty( cx , obj , "_db" , &(argv[1]) ) );
-@@ -394,12 +490,20 @@ namespace mongo {
+@@ -394,12 +464,20 @@ namespace mongo {
return JS_TRUE;
}
+- JSBool db_collection_resolve( JSContext *cx, JSObject *obj, jsval id, uintN flags, JSObject **objp ) {
+#if JS_VERSION < 185
- JSBool db_collection_resolve( JSContext *cx, JSObject *obj, jsval id, uintN flags, JSObject **objp ) {
++ JSBool db_collection_resolve( JSContext *cx, JSObject *obj, jsval idval, uintN flags, JSObject **objp ) {
+#else
+ JSBool db_collection_resolve( JSContext *cx, JSObject *obj, jsid id, uintN flags, JSObject **objp ) {
++ jsval idval;
++ assert(JS_IdToValue(cx, id, &idval));
+#endif
++ *objp = NULL;
++
if ( flags & JSRESOLVE_ASSIGNING )
return JS_TRUE;
Convertor c( cx );
-+#if JS_VERSION < 185
- string collname = c.toString( id );
-+#else
-+ string collname = c.toString( JSID_TO_STRING(id) );
-+#endif
+- string collname = c.toString( id );
++ string collname = c.toString( idval );
if ( isSpecialName( collname ) )
return JS_TRUE;
-@@ -429,7 +533,7 @@ namespace mongo {
+@@ -429,7 +507,7 @@ namespace mongo {
JSClass db_collection_class = {
"DBCollection" , JSCLASS_HAS_PRIVATE | JSCLASS_NEW_RESOLVE ,
@@ -918,7 +878,7 @@ index 2a9169b..6bcf01f 100644
JS_EnumerateStub, (JSResolveOp)(&db_collection_resolve) , JS_ConvertStub, JS_FinalizeStub,
JSCLASS_NO_OPTIONAL_MEMBERS
};
-@@ -460,9 +564,16 @@ namespace mongo {
+@@ -460,9 +538,16 @@ namespace mongo {
}
// -------------- DB ---------------
@@ -929,39 +889,41 @@ index 2a9169b..6bcf01f 100644
+#else
+ extern JSClass db_class;
+
-+ JSBool db_constructor( JSContext *cx, uintN argc, jsval *vp ) {
-+ jsval *argv = JS_ARGV(cx, vp);
-+ JSObject *obj = JS_NewObject(cx, &db_class, NULL, NULL);
-+ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
++ JSBool db_constructor( JSContext *cx, uintN argc, jsval *rval ) {
++ jsval *argv = JS_ARGV(cx, rval);
++ JSObject *obj = JS_NewObject(cx, &db_class, NULL, NULL);
++ JS_SET_RVAL(cx, rval, OBJECT_TO_JSVAL(obj));
+#endif
smuassert( cx, "wrong number of arguments to DB" , argc == 2 );
assert( JS_SetProperty( cx , obj , "_mongo" , &(argv[0]) ) );
assert( JS_SetProperty( cx , obj , "_name" , &(argv[1]) ) );
-@@ -470,7 +581,11 @@ namespace mongo {
+@@ -470,7 +555,15 @@ namespace mongo {
return JS_TRUE;
}
+- JSBool db_resolve( JSContext *cx, JSObject *obj, jsval id, uintN flags, JSObject **objp ) {
+#if JS_VERSION < 185
- JSBool db_resolve( JSContext *cx, JSObject *obj, jsval id, uintN flags, JSObject **objp ) {
++ JSBool db_resolve( JSContext *cx, JSObject *obj, jsval idval, uintN flags, JSObject **objp ) {
+#else
-+ JSBool db_resolve( JSContext *cx, JSObject *obj, jsid id, uintN flags, JSObject **objp ) {
++ JSBool db_resolve( JSContext *cx, JSObject *obj, jsid id, uintN flags, JSObject **objp ) {
++ jsval idval;
++ assert(JS_IdToValue(cx, id, &idval));
+#endif
++ *objp = NULL;
++
if ( flags & JSRESOLVE_ASSIGNING )
return JS_TRUE;
-@@ -479,7 +594,11 @@ namespace mongo {
+@@ -479,7 +572,7 @@ namespace mongo {
if ( obj == c.getGlobalPrototype( "DB" ) )
return JS_TRUE;
-+#if JS_VERSION < 185
- string collname = c.toString( id );
-+#else
-+ string collname = c.toString( JSID_TO_STRING(id) );
-+#endif
+- string collname = c.toString( id );
++ string collname = c.toString( idval );
if ( isSpecialName( collname ) )
return JS_TRUE;
-@@ -499,15 +618,21 @@ namespace mongo {
+@@ -499,15 +592,20 @@ namespace mongo {
JSClass db_class = {
"DB" , JSCLASS_HAS_PRIVATE | JSCLASS_NEW_RESOLVE ,
@@ -977,27 +939,27 @@ index 2a9169b..6bcf01f 100644
+#if JS_VERSION < 185
JSBool object_id_constructor( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval ) {
+#else
-+ JSBool object_id_constructor( JSContext *cx, uintN argc, jsval *vp) {
-+ jsval *argv = JS_ARGV(cx, vp);
-+ JSObject *obj = JS_NewObject(cx, &object_id_class, NULL, NULL);
-+ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
++ JSBool object_id_constructor( JSContext *cx, uintN argc, jsval *rval) {
++ jsval *argv = JS_ARGV(cx, rval);
++ JSObject *obj = NULL;
+#endif
Convertor c( cx );
OID oid;
-@@ -532,7 +657,11 @@ namespace mongo {
- if ( ! JS_InstanceOf( cx , obj , &object_id_class , 0 ) ) {
+@@ -529,10 +627,10 @@ namespace mongo {
+ oid.init( s );
+ }
+
+- if ( ! JS_InstanceOf( cx , obj , &object_id_class , 0 ) ) {
++ if ( ! obj || ! JS_InstanceOf( cx , obj , &object_id_class , 0 ) ) {
obj = JS_NewObject( cx , &object_id_class , 0 , 0 );
CHECKNEWOBJECT( obj, cx, "object_id_constructor" );
-+#if JS_VERSION < 185
- *rval = OBJECT_TO_JSVAL( obj );
-+#else
-+ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL( obj ));
-+#endif
+- *rval = OBJECT_TO_JSVAL( obj );
++ JS_SET_RVAL(cx, rval, OBJECT_TO_JSVAL( obj ));
}
jsval v = c.toval( oid.str().c_str() );
-@@ -543,24 +672,38 @@ namespace mongo {
+@@ -543,24 +641,36 @@ namespace mongo {
JSClass object_id_class = {
"ObjectId" , JSCLASS_HAS_PRIVATE ,
@@ -1009,22 +971,21 @@ index 2a9169b..6bcf01f 100644
+#if JS_VERSION < 185
JSBool object_id_tostring(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
- Convertor c(cx);
- return (JSBool) (*rval = c.getProperty( obj , "str" ));
+#else
-+ JSBool object_id_tostring(JSContext *cx, uintN argc, jsval *vp) {
-+ JSObject *obj = JS_THIS_OBJECT(cx, vp);
-+ Convertor c(cx);
-+ JS_SET_RVAL(cx, vp, c.getProperty( obj , "str" ));
-+ return (JSBool) JS_RVAL(cx, vp);
++ JSBool object_id_tostring(JSContext *cx, uintN argc, jsval *rval) {
++ JSObject *obj = JS_THIS_OBJECT(cx, rval);
+#endif
+ Convertor c(cx);
+- return (JSBool) (*rval = c.getProperty( obj , "str" ));
++ JS_SET_RVAL(cx, rval, c.getProperty( obj , "str" ));
++ return (JSBool) JS_RVAL(cx, rval);
}
JSFunctionSpec object_id_functions[] = {
- { "toString" , object_id_tostring , 0 , JSPROP_READONLY | JSPROP_PERMANENT, 0 } ,
- { 0 }
-+ FUNCSPEC( "toString" , object_id_tostring , 0 , JSPROP_READONLY | JSPROP_PERMANENT ),
-+ FUNCSPEC( NULL, NULL, 0, 0 )
++ FUNCSPEC( "toString" , object_id_tostring , 0 , JSPROP_READONLY | JSPROP_PERMANENT ),
++ FUNCSPEC( NULL, NULL, 0, 0 )
};
// dbpointer
@@ -1032,15 +993,15 @@ index 2a9169b..6bcf01f 100644
+#if JS_VERSION < 185
JSBool dbpointer_constructor( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval ) {
+#else
-+ JSBool dbpointer_constructor( JSContext *cx, uintN argc, jsval *vp ) {
-+ jsval *argv = JS_ARGV(cx, vp);
-+ JSObject *obj = JS_NewObject(cx, &dbpointer_class, NULL, NULL);
-+ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
++ JSBool dbpointer_constructor( JSContext *cx, uintN argc, jsval *rval ) {
++ jsval *argv = JS_ARGV(cx, rval);
++ JSObject *obj = JS_NewObject(cx, &dbpointer_class, NULL, NULL);
++ JS_SET_RVAL(cx, rval, OBJECT_TO_JSVAL(obj));
+#endif
Convertor c( cx );
if ( argc == 2 ) {
-@@ -582,7 +725,7 @@ namespace mongo {
+@@ -582,7 +692,7 @@ namespace mongo {
JSClass dbpointer_class = {
"DBPointer" , JSCLASS_HAS_PRIVATE ,
@@ -1049,7 +1010,7 @@ index 2a9169b..6bcf01f 100644
JS_EnumerateStub, JS_ResolveStub , JS_ConvertStub, JS_FinalizeStub,
JSCLASS_NO_OPTIONAL_MEMBERS
};
-@@ -591,8 +734,14 @@ namespace mongo {
+@@ -591,8 +701,14 @@ namespace mongo {
{ 0 }
};
@@ -1057,15 +1018,15 @@ index 2a9169b..6bcf01f 100644
+#if JS_VERSION < 185
JSBool dbref_constructor( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval ) {
+#else
-+ JSBool dbref_constructor( JSContext *cx, uintN argc, jsval *vp ) {
-+ jsval *argv = JS_ARGV(cx, vp);
-+ JSObject *obj = JS_NewObject(cx, &dbref_class, NULL, NULL);
-+ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
++ JSBool dbref_constructor( JSContext *cx, uintN argc, jsval *rval ) {
++ jsval *argv = JS_ARGV(cx, rval);
++ JSObject *obj = JS_NewObject(cx, &dbref_class, NULL, NULL);
++ JS_SET_RVAL(cx, rval, OBJECT_TO_JSVAL(obj));
+#endif
Convertor c( cx );
if ( argc == 2 ) {
-@@ -616,7 +765,16 @@ namespace mongo {
+@@ -616,7 +732,16 @@ namespace mongo {
// UUID **************************
#if 0
@@ -1074,40 +1035,37 @@ index 2a9169b..6bcf01f 100644
+#else
+ extern JSClass uuid_class;
+
-+ JSBool uuid_constructor( JSContext *cx, uintN argc, jsval *vp ) {
-+ jsval *argv = JS_ARGV(cx, vp);
-+ JSObject *obj = JS_NewObject(cx, &uuid_class, NULL, NULL);
-+ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
++ JSBool uuid_constructor( JSContext *cx, uintN argc, jsval *rval ) {
++ jsval *argv = JS_ARGV(cx, rval);
++ JSObject *obj = JS_NewObject(cx, &uuid_class, NULL, NULL);
++ JS_SET_RVAL(cx, rval, OBJECT_TO_JSVAL(obj));
+#endif
Convertor c( cx );
if( argc == 0 ) {
-@@ -654,7 +812,12 @@ zzz
+@@ -654,7 +779,12 @@ zzz
}
}
+#if JS_VERSION < 185
JSBool uuid_tostring(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
+#else
-+ JSBool uuid_tostring(JSContext *cx, uintN argc, jsval *vp) {
-+ JSObject *obj = JS_THIS_OBJECT(cx, vp);
++ JSBool uuid_tostring(JSContext *cx, uintN argc, jsval *rval) {
++ JSObject *obj = JS_THIS_OBJECT(cx, rval);
+#endif
Convertor c(cx);
void *holder = JS_GetPrivate( cx, obj );
assert( holder );
-@@ -663,7 +826,11 @@ zzz
+@@ -663,7 +793,7 @@ zzz
ss << "UUID(\"" << toHex(data, 16);
ss << "\")";
string ret = ss.str();
-+#if JS_VERSION < 185
- return *rval = c.toval( ret.c_str() );
-+#else
-+ return JS_SET_RVAL(cx, vp, c.toval( ret.c_str() ));
-+#endif
+- return *rval = c.toval( ret.c_str() );
++ return JS_SET_RVAL(cx, rval, c.toval( ret.c_str() ));
}
void uuid_finalize( JSContext * cx , JSObject * obj ) {
-@@ -690,8 +857,14 @@ zzz
+@@ -690,8 +820,14 @@ zzz
#endif
// BinData **************************
@@ -1115,80 +1073,71 @@ index 2a9169b..6bcf01f 100644
+#if JS_VERSION < 185
JSBool bindata_constructor( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval ) {
+#else
-+ JSBool bindata_constructor( JSContext *cx, uintN argc, jsval *vp ) {
-+ jsval *argv = JS_ARGV(cx, vp);
-+ JSObject *obj = JS_NewObject(cx, &bindata_class, NULL, NULL);
-+ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
++ JSBool bindata_constructor( JSContext *cx, uintN argc, jsval *rval ) {
++ jsval *argv = JS_ARGV(cx, rval);
++ JSObject *obj = JS_NewObject(cx, &bindata_class, NULL, NULL);
++ JS_SET_RVAL(cx, rval, OBJECT_TO_JSVAL(obj));
+#endif
Convertor c( cx );
if ( argc == 2 ) {
-@@ -723,7 +896,12 @@ zzz
+@@ -723,7 +859,12 @@ zzz
}
}
+#if JS_VERSION < 185
JSBool bindata_tostring(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
+#else
-+ JSBool bindata_tostring(JSContext *cx, uintN argc, jsval *vp) {
-+ JSObject *obj = JS_THIS_OBJECT(cx, vp);
++ JSBool bindata_tostring(JSContext *cx, uintN argc, jsval *rval) {
++ JSObject *obj = JS_THIS_OBJECT(cx, rval);
+#endif
Convertor c(cx);
int type = (int)c.getNumber( obj , "type" );
int len = (int)c.getNumber( obj, "len" );
-@@ -735,10 +913,19 @@ zzz
+@@ -735,10 +876,15 @@ zzz
base64::encode( ss, (const char *)data, len );
ss << "\")";
string ret = ss.str();
-+#if JS_VERSION < 185
- return *rval = c.toval( ret.c_str() );
-+#else
-+ return JS_SET_RVAL(cx, vp, c.toval( ret.c_str() ));
-+#endif
+- return *rval = c.toval( ret.c_str() );
++ return JS_SET_RVAL(cx, rval, c.toval( ret.c_str() ));
}
+#if JS_VERSION < 185
JSBool bindataBase64(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
+#else
-+ JSBool bindataBase64(JSContext *cx, uintN argc, jsval *vp) {
-+ JSObject *obj = JS_THIS_OBJECT(cx, vp);
++ JSBool bindataBase64(JSContext *cx, uintN argc, jsval *rval) {
++ JSObject *obj = JS_THIS_OBJECT(cx, rval);
+#endif
Convertor c(cx);
int len = (int)c.getNumber( obj, "len" );
void *holder = JS_GetPrivate( cx, obj );
-@@ -747,10 +934,19 @@ zzz
+@@ -747,10 +893,15 @@ zzz
stringstream ss;
base64::encode( ss, (const char *)data, len );
string ret = ss.str();
-+#if JS_VERSION < 185
- return *rval = c.toval( ret.c_str() );
-+#else
-+ return JS_SET_RVAL(cx, vp, c.toval( ret.c_str() ));
-+#endif
+- return *rval = c.toval( ret.c_str() );
++ return JS_SET_RVAL(cx, rval, c.toval( ret.c_str() ));
}
+#if JS_VERSION < 185
JSBool bindataAsHex(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
+#else
-+ JSBool bindataAsHex(JSContext *cx, uintN argc, jsval *vp) {
-+ JSObject *obj = JS_THIS_OBJECT(cx, vp);
++ JSBool bindataAsHex(JSContext *cx, uintN argc, jsval *rval) {
++ JSObject *obj = JS_THIS_OBJECT(cx, rval);
+#endif
Convertor c(cx);
int len = (int)c.getNumber( obj, "len" );
void *holder = JS_GetPrivate( cx, obj );
-@@ -765,7 +961,11 @@ zzz
+@@ -765,7 +916,7 @@ zzz
ss << setw(2) << v;
}
string ret = ss.str();
-+#if JS_VERSION < 185
- return *rval = c.toval( ret.c_str() );
-+#else
-+ return JS_SET_RVAL(cx, vp, c.toval( ret.c_str() ));
-+#endif
+- return *rval = c.toval( ret.c_str() );
++ return JS_SET_RVAL(cx, rval, c.toval( ret.c_str() ));
}
void bindata_finalize( JSContext * cx , JSObject * obj ) {
-@@ -779,16 +979,16 @@ zzz
+@@ -779,16 +930,16 @@ zzz
JSClass bindata_class = {
"BinData" , JSCLASS_HAS_PRIVATE ,
@@ -1203,14 +1152,14 @@ index 2a9169b..6bcf01f 100644
- { "hex", bindataAsHex, 0, JSPROP_READONLY | JSPROP_PERMANENT, 0 } ,
- { "base64", bindataBase64, 0, JSPROP_READONLY | JSPROP_PERMANENT, 0 } ,
- { 0 }
-+ FUNCSPEC( "toString" , bindata_tostring , 0 , JSPROP_READONLY | JSPROP_PERMANENT ),
-+ FUNCSPEC( "hex", bindataAsHex, 0, JSPROP_READONLY | JSPROP_PERMANENT ),
-+ FUNCSPEC( "base64", bindataBase64, 0, JSPROP_READONLY | JSPROP_PERMANENT ),
-+ FUNCSPEC( NULL, NULL, 0, 0 ),
++ FUNCSPEC( "toString" , bindata_tostring , 0 , JSPROP_READONLY | JSPROP_PERMANENT ),
++ FUNCSPEC( "hex", bindataAsHex, 0, JSPROP_READONLY | JSPROP_PERMANENT ),
++ FUNCSPEC( "base64", bindataBase64, 0, JSPROP_READONLY | JSPROP_PERMANENT ),
++ FUNCSPEC( NULL, NULL, 0, 0 ),
};
// Map
-@@ -797,12 +997,23 @@ zzz
+@@ -797,12 +948,23 @@ zzz
return s == "put" || s == "get" || s == "_get" || s == "values" || s == "_data" || s == "constructor" ;
}
@@ -1219,7 +1168,7 @@ index 2a9169b..6bcf01f 100644
+#else
+ extern JSClass map_class;
+
-+ JSBool map_constructor( JSContext *cx, uintN argc, jsval *vp) {
++ JSBool map_constructor( JSContext *cx, uintN argc, jsval *rval) {
+#endif
if ( argc > 0 ) {
JS_ReportError( cx , "Map takes no arguments" );
@@ -1228,41 +1177,33 @@ index 2a9169b..6bcf01f 100644
+#if JS_VERSION >= 185
+ JSObject *obj = JS_NewObject(cx, &map_class, NULL, NULL);
-+ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
++ JS_SET_RVAL(cx, rval, OBJECT_TO_JSVAL(obj));
+#endif
+
JSObject * array = JS_NewObject( cx , 0 , 0 , 0 );
CHECKNEWOBJECT( array, cx, "map_constructor" );
-@@ -812,19 +1023,42 @@ zzz
+@@ -812,7 +974,13 @@ zzz
return JS_TRUE;
}
+#if JS_VERSION < 185
JSBool map_prop( JSContext *cx, JSObject *obj, jsval idval, jsval *vp ) {
+#else
-+ JSBool map_prop_strict( JSContext *cx, JSObject *obj, jsid id, JSBool strict, jsval *vp ) {
++ JSBool map_prop( JSContext *cx, JSObject *obj, jsid id, jsval *vp ) {
++ jsval idval;
++ assert(JS_IdToValue(cx, id, &idval));
+#endif
Convertor c(cx);
-+#if JS_VERSION < 185
if ( specialMapString( c.toString( idval ) ) )
-+#else
-+ if ( specialMapString( c.toString( JSID_TO_STRING(id) ) ) )
-+#endif
return JS_TRUE;
-
-+#if JS_VERSION < 185
- log() << "illegal prop access: " << c.toString( idval ) << endl;
-+#else
-+ log() << "illegal prop access: " << c.toString( JSID_TO_STRING(id) ) << endl;
-+#endif
- JS_ReportError( cx , "can't use array access with Map" );
+@@ -822,9 +990,20 @@ zzz
return JS_FALSE;
}
+#if JS_VERSION >= 185
-+ JSBool map_prop( JSContext *cx, JSObject *obj, jsid id, jsval *vp ) {
-+ return map_prop_strict( cx , obj , id , JS_FALSE , vp );
++ JSBool map_prop_strict( JSContext *cx, JSObject *obj, jsid id, JSBool strict, jsval *vp ) {
++ return map_prop( cx , obj , id , vp );
+ }
+#endif
+
@@ -1278,7 +1219,7 @@ index 2a9169b..6bcf01f 100644
JS_EnumerateStub, JS_ResolveStub , JS_ConvertStub, JS_FinalizeStub,
JSCLASS_NO_OPTIONAL_MEMBERS
};
-@@ -838,18 +1072,33 @@ zzz
+@@ -838,18 +1017,25 @@ zzz
JSClass timestamp_class = {
"Timestamp" , JSCLASS_HAS_PRIVATE ,
@@ -1291,29 +1232,23 @@ index 2a9169b..6bcf01f 100644
+#if JS_VERSION < 185
JSBool timestamp_constructor( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval ) {
+#else
-+ JSBool timestamp_constructor( JSContext *cx, uintN argc, jsval *vp ) {
-+ jsval *argv = JS_ARGV(cx, vp);
++ JSBool timestamp_constructor( JSContext *cx, uintN argc, jsval *rval ) {
++ jsval *argv = JS_ARGV(cx, rval);
++ JSObject *obj = NULL;
+#endif
+
smuassert( cx , "Timestamp needs 0 or 2 args" , argc == 0 || argc == 2 );
-+#if JS_VERSION >= 185
-+ JSObject *obj = JS_NewObject(cx, ×tamp_class, NULL, NULL);
-+ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
-+#endif
-+
- if ( ! JS_InstanceOf( cx , obj , ×tamp_class , 0 ) ) {
+- if ( ! JS_InstanceOf( cx , obj , ×tamp_class , 0 ) ) {
++ if ( ! obj || ! JS_InstanceOf( cx , obj , ×tamp_class , 0 ) ) {
obj = JS_NewObject( cx , ×tamp_class , 0 , 0 );
CHECKNEWOBJECT( obj, cx, "timestamp_constructor" );
-+#if JS_VERSION < 185
- *rval = OBJECT_TO_JSVAL( obj );
-+#else
-+ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL( obj ));
-+#endif
+- *rval = OBJECT_TO_JSVAL( obj );
++ JS_SET_RVAL(cx, rval, OBJECT_TO_JSVAL( obj ));
}
Convertor c( cx );
-@@ -868,18 +1117,33 @@ zzz
+@@ -868,18 +1054,25 @@ zzz
JSClass numberlong_class = {
"NumberLong" , JSCLASS_HAS_PRIVATE ,
@@ -1326,71 +1261,61 @@ index 2a9169b..6bcf01f 100644
+#if JS_VERSION < 185
JSBool numberlong_constructor( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval ) {
+#else
-+ JSBool numberlong_constructor( JSContext *cx, uintN argc, jsval *vp ) {
-+ jsval *argv = JS_ARGV(cx, vp);
++ JSBool numberlong_constructor( JSContext *cx, uintN argc, jsval *rval ) {
++ jsval *argv = JS_ARGV(cx, rval);
++ JSObject *obj = NULL;
+#endif
+
smuassert( cx , "NumberLong needs 0 or 1 args" , argc == 0 || argc == 1 );
-+#if JS_VERSION >= 185
-+ JSObject *obj = JS_NewObject(cx, &numberlong_class, NULL, NULL);
-+ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
-+#endif
-+
- if ( ! JS_InstanceOf( cx , obj , &numberlong_class , 0 ) ) {
+- if ( ! JS_InstanceOf( cx , obj , &numberlong_class , 0 ) ) {
++ if ( ! obj || ! JS_InstanceOf( cx , obj , &numberlong_class , 0 ) ) {
obj = JS_NewObject( cx , &numberlong_class , 0 , 0 );
CHECKNEWOBJECT( obj, cx, "numberlong_constructor" );
-+#if JS_VERSION < 185
- *rval = OBJECT_TO_JSVAL( obj );
-+#else
-+ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL( obj ));
-+#endif
+- *rval = OBJECT_TO_JSVAL( obj );
++ JS_SET_RVAL(cx, rval, OBJECT_TO_JSVAL( obj ));
}
Convertor c( cx );
-@@ -907,16 +1171,33 @@ zzz
+@@ -907,16 +1100,31 @@ zzz
return JS_TRUE;
}
+#if JS_VERSION < 185
JSBool numberlong_valueof(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
- Convertor c(cx);
- return *rval = c.toval( double( c.toNumberLongUnsafe( obj ) ) );
+#else
-+ JSBool numberlong_valueof(JSContext *cx, uintN argc, jsval *vp) {
-+ Convertor c(cx);
-+ JSObject *obj = JS_THIS_OBJECT(cx, vp);
-+ return JS_SET_RVAL(cx, vp, c.toval( double( c.toNumberLongUnsafe( obj ) ) ));
++ JSBool numberlong_valueof(JSContext *cx, uintN argc, jsval *rval) {
++ JSObject *obj = JS_THIS_OBJECT(cx, rval);
+#endif
+ Convertor c(cx);
+- return *rval = c.toval( double( c.toNumberLongUnsafe( obj ) ) );
++ return JS_SET_RVAL(cx, rval, c.toval( double( c.toNumberLongUnsafe( obj ) ) ));
}
+#if JS_VERSION < 185
JSBool numberlong_tonumber(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
return numberlong_valueof( cx, obj, argc, argv, rval );
+#else
-+ JSBool numberlong_tonumber(JSContext *cx, uintN argc, jsval *vp) {
-+ return numberlong_valueof( cx, argc, vp );
++ JSBool numberlong_tonumber(JSContext *cx, uintN argc, jsval *rval) {
++ return numberlong_valueof( cx, argc, rval );
+#endif
}
+#if JS_VERSION < 185
JSBool numberlong_tostring(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
+#else
-+ JSBool numberlong_tostring(JSContext *cx, uintN argc, jsval *vp) {
-+ JSObject *obj = JS_THIS_OBJECT(cx, vp);
++ JSBool numberlong_tostring(JSContext *cx, uintN argc, jsval *rval) {
++ JSObject *obj = JS_THIS_OBJECT(cx, rval);
+#endif
Convertor c(cx);
stringstream ss;
long long val = c.toNumberLongUnsafe( obj );
-@@ -928,30 +1209,48 @@ zzz
+@@ -928,30 +1136,36 @@ zzz
ss << "NumberLong(" << val << ")";
string ret = ss.str();
-+#if JS_VERSION < 185
- return *rval = c.toval( ret.c_str() );
-+#else
-+ return JS_SET_RVAL(cx, vp, c.toval( ret.c_str() ));
-+#endif
+- return *rval = c.toval( ret.c_str() );
++ return JS_SET_RVAL(cx, rval, c.toval( ret.c_str() ));
}
JSFunctionSpec numberlong_functions[] = {
@@ -1415,83 +1340,69 @@ index 2a9169b..6bcf01f 100644
+#if JS_VERSION < 185
JSBool numberint_constructor( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval ) {
+#else
-+ JSBool numberint_constructor( JSContext *cx, uintN argc, jsval *vp ) {
-+ jsval *argv = JS_ARGV(cx, vp);
++ JSBool numberint_constructor( JSContext *cx, uintN argc, jsval *rval ) {
++ jsval *argv = JS_ARGV(cx, rval);
++ JSObject *obj = NULL;
+#endif
smuassert( cx , "NumberInt needs 0 or 1 args" , argc == 0 || argc == 1 );
-+#if JS_VERSION >= 185
-+ JSObject *obj = JS_NewObject(cx, &numberlong_class, NULL, NULL);
-+ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
-+#endif
-+
- if ( ! JS_InstanceOf( cx , obj , &numberint_class , 0 ) ) {
+- if ( ! JS_InstanceOf( cx , obj , &numberint_class , 0 ) ) {
++ if ( ! obj || ! JS_InstanceOf( cx , obj , &numberint_class , 0 ) ) {
obj = JS_NewObject( cx , &numberint_class , 0 , 0 );
CHECKNEWOBJECT( obj, cx, "numberint_constructor" );
-+#if JS_VERSION < 185
- *rval = OBJECT_TO_JSVAL( obj );
-+#else
-+ JS_SET_RVAL( cx, vp, OBJECT_TO_JSVAL( obj ) );
-+#endif
+- *rval = OBJECT_TO_JSVAL( obj );
++ JS_SET_RVAL( cx, rval, OBJECT_TO_JSVAL( obj ) );
}
Convertor c( cx );
-@@ -979,57 +1278,99 @@ zzz
+@@ -979,57 +1193,89 @@ zzz
return JS_TRUE;
}
+#if JS_VERSION < 185
JSBool numberint_valueof(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
- Convertor c(cx);
- return *rval = c.toval( double( c.toNumberInt( obj ) ) );
+#else
-+ JSBool numberint_valueof(JSContext *cx, uintN argc, jsval *vp) {
-+ JSObject *obj = JS_THIS_OBJECT( cx , vp );
-+ Convertor c(cx);
-+ return JS_SET_RVAL( cx , vp , c.toval( double( c.toNumberInt( obj ) ) ) );
++ JSBool numberint_valueof(JSContext *cx, uintN argc, jsval *rval) {
++ JSObject *obj = JS_THIS_OBJECT( cx , rval );
+#endif
+ Convertor c(cx);
+- return *rval = c.toval( double( c.toNumberInt( obj ) ) );
++ return JS_SET_RVAL( cx , rval , c.toval( double( c.toNumberInt( obj ) ) ) );
}
+#if JS_VERSION < 185
JSBool numberint_tonumber(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
return numberint_valueof( cx, obj, argc, argv, rval );
+#else
-+ JSBool numberint_tonumber(JSContext *cx, uintN argc, jsval *vp) {
-+ return numberint_valueof( cx, argc, vp );
++ JSBool numberint_tonumber(JSContext *cx, uintN argc, jsval *rval) {
++ return numberint_valueof( cx, argc, rval );
+#endif
}
+#if JS_VERSION < 185
JSBool numberint_tostring(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
+#else
-+ JSBool numberint_tostring(JSContext *cx, uintN argc, jsval *vp) {
-+ JSObject *obj = JS_THIS_OBJECT( cx , vp );
++ JSBool numberint_tostring(JSContext *cx, uintN argc, jsval *rval) {
++ JSObject *obj = JS_THIS_OBJECT( cx , rval );
+#endif
Convertor c(cx);
int val = c.toNumberInt( obj );
string ret = str::stream() << "NumberInt(" << val << ")";
-+#if JS_VERSION < 185
- return *rval = c.toval( ret.c_str() );
-+#else
-+ return JS_SET_RVAL( cx, vp, c.toval( ret.c_str() ) );
-+#endif
+- return *rval = c.toval( ret.c_str() );
++ return JS_SET_RVAL( cx, rval, c.toval( ret.c_str() ) );
}
-- JSBool numberint_tojson(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
+#if JS_VERSION < 185
-+ JSBool numberint_tojson(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
+ JSBool numberint_tojson(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
+#else
-+ JSBool numberint_tojson(JSContext *cx, uintN argc, jsval *vp) {
-+ JSObject *obj = JS_THIS_OBJECT( cx , vp );
++ JSBool numberint_tojson(JSContext *cx, uintN argc, jsval *rval) {
++ JSObject *obj = JS_THIS_OBJECT( cx , rval );
+#endif
Convertor c(cx);
int val = c.toNumberInt( obj );
string ret = str::stream() << val;
-+#if JS_VERSION < 185
- return *rval = c.toval( ret.c_str() );
-+#else
-+ return JS_SET_RVAL( cx, vp, c.toval( ret.c_str() ) );
-+#endif
+- return *rval = c.toval( ret.c_str() );
++ return JS_SET_RVAL( cx, rval, c.toval( ret.c_str() ) );
}
-
@@ -1501,11 +1412,11 @@ index 2a9169b..6bcf01f 100644
- { "toString" , numberint_tostring , 0 , JSPROP_READONLY | JSPROP_PERMANENT, 0 } ,
- { "tojson" , numberint_tojson , 0 , JSPROP_READONLY | JSPROP_PERMANENT, 0 } ,
- { 0 }
-+ FUNCSPEC( "valueOf" , numberint_valueof , 0 , JSPROP_READONLY | JSPROP_PERMANENT ) ,
-+ FUNCSPEC( "toNumber" , numberint_tonumber , 0 , JSPROP_READONLY | JSPROP_PERMANENT ) ,
-+ FUNCSPEC( "toString" , numberint_tostring , 0 , JSPROP_READONLY | JSPROP_PERMANENT ) ,
-+ FUNCSPEC( "tojson" , numberint_tojson , 0 , JSPROP_READONLY | JSPROP_PERMANENT ) ,
-+ FUNCSPEC( NULL , NULL , 0 , 0 )
++ FUNCSPEC( "valueOf" , numberint_valueof , 0 , JSPROP_READONLY | JSPROP_PERMANENT ) ,
++ FUNCSPEC( "toNumber" , numberint_tonumber , 0 , JSPROP_READONLY | JSPROP_PERMANENT ) ,
++ FUNCSPEC( "toString" , numberint_tostring , 0 , JSPROP_READONLY | JSPROP_PERMANENT ) ,
++ FUNCSPEC( "tojson" , numberint_tojson , 0 , JSPROP_READONLY | JSPROP_PERMANENT ) ,
++ FUNCSPEC( NULL , NULL , 0 , 0 )
};
JSClass minkey_class = {
@@ -1531,53 +1442,48 @@ index 2a9169b..6bcf01f 100644
+#else
+ extern JSClass dbquery_class;
+
-+ JSBool dbquery_constructor( JSContext *cx, uintN argc, jsval *vp ) {
-+ jsval *argv = JS_ARGV(cx, vp);
++ JSBool dbquery_constructor( JSContext *cx, uintN argc, jsval *rval ) {
++ jsval *argv = JS_ARGV(cx, rval);
+#endif
+
smuassert( cx , "DDQuery needs at least 4 args" , argc >= 4 );
+#if JS_VERSION >= 185
-+ JSObject *obj = JS_NewObject(cx, &dbquery_class, NULL, NULL);
-+ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
++ JSObject *obj = JS_NewObject(cx, &dbquery_class, NULL, NULL);
++ JS_SET_RVAL(cx, rval, OBJECT_TO_JSVAL(obj));
+#endif
+
Convertor c(cx);
c.setProperty( obj , "_mongo" , argv[0] );
c.setProperty( obj , "_db" , argv[1] );
-@@ -1078,24 +1419,41 @@ zzz
+@@ -1078,24 +1324,33 @@ zzz
return JS_TRUE;
}
+- JSBool dbquery_resolve( JSContext *cx, JSObject *obj, jsval id, uintN flags, JSObject **objp ) {
+#if JS_VERSION < 185
- JSBool dbquery_resolve( JSContext *cx, JSObject *obj, jsval id, uintN flags, JSObject **objp ) {
++ JSBool dbquery_resolve( JSContext *cx, JSObject *obj, jsval idval, uintN flags, JSObject **objp ) {
+#else
+ JSBool dbquery_resolve( JSContext *cx, JSObject *obj, jsid id, uintN flags, JSObject **objp ) {
++ jsval idval;
++ assert(JS_IdToValue(cx, id, &idval));
+#endif
++ *objp = NULL;
++
if ( flags & JSRESOLVE_ASSIGNING )
return JS_TRUE;
-+#if JS_VERSION < 185
- if ( ! JSVAL_IS_NUMBER( id ) )
-+#else
-+ jsval arg;
-+ assert( JS_IdToValue(cx, id, &arg) );
-+
-+ if ( ! JSVAL_IS_NUMBER( arg ) )
-+#endif
+- if ( ! JSVAL_IS_NUMBER( id ) )
++ if ( ! JSVAL_IS_NUMBER( idval ) )
return JS_TRUE;
jsval val = JSVAL_VOID;
- assert( JS_CallFunctionName( cx , obj , "arrayAccess" , 1 , &id , &val ) );
+
Convertor c(cx);
-+#if JS_VERSION < 185
-+ assert( JS_CallFunctionName( cx , obj , "arrayAccess" , 1 , &id , &val ) );
- c.setProperty( obj , c.toString( id ).c_str() , val );
-+#else
-+ assert( JS_CallFunctionName( cx , obj , "arrayAccess" , 1 , &arg, &val ) );
-+ c.setProperty( obj , c.toString( arg ).c_str() , val );
-+#endif
+- c.setProperty( obj , c.toString( id ).c_str() , val );
++ assert( JS_CallFunctionName( cx , obj , "arrayAccess" , 1 , &idval , &val ) );
++ c.setProperty( obj , c.toString( idval ).c_str() , val );
*objp = obj;
return JS_TRUE;
}
@@ -1589,7 +1495,7 @@ index 2a9169b..6bcf01f 100644
JS_EnumerateStub, (JSResolveOp)(&dbquery_resolve) , JS_ConvertStub, JS_FinalizeStub,
JSCLASS_NO_OPTIONAL_MEMBERS
};
-@@ -1198,7 +1556,11 @@ zzz
+@@ -1198,7 +1453,11 @@ zzz
return true;
}
#else
@@ -1601,7 +1507,7 @@ index 2a9169b..6bcf01f 100644
jsdouble d = js_DateGetMsecSinceEpoch( c->_context , o );
long long d2 = (long long)d;
b.appendDate( name , Date_t((unsigned long long)d2) );
-@@ -1232,6 +1594,8 @@ zzz
+@@ -1232,6 +1491,8 @@ zzz
bool isDate( JSContext * cx , JSObject * o ) {
#if defined( SM16 ) || defined( MOZJS ) || defined( XULRUNNER )
return js_DateGetMsecSinceEpoch( cx , o ) != 0;
diff --git a/mongodb.spec b/mongodb.spec
index 89063d5..5c6fadf 100644
--- a/mongodb.spec
+++ b/mongodb.spec
@@ -5,7 +5,7 @@
Name: mongodb
Version: 2.0.2
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: High-performance, schema-free document-oriented database
Group: Applications/Databases
License: AGPLv3 and zlib and ASL 2.0
@@ -271,6 +271,9 @@ fi
%{_includedir}/mongo
%changelog
+* Fri Feb 03 2012 Nathaniel McCallum <nathaniel at natemccallum.com> - 2.0.2-6
+- Clean up mongodb-src-r2.0.2-js.patch and fix #787246
+
* Tue Jan 17 2012 Nathaniel McCallum <nathaniel at natemccallum.com> - 2.0.2-5
- Enable build using external snappy
More information about the scm-commits
mailing list