From f9e648decb9320090e4100e710d4eaf6eb978d0d Mon Sep 17 00:00:00 2001 From: Eliot Horowitz Date: Mon, 25 May 2009 17:58:02 -0400 Subject: [PATCH] some asserts and safety stuff MINOR --- scripting/engine_spidermonkey.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/scripting/engine_spidermonkey.cpp b/scripting/engine_spidermonkey.cpp index 8f809fb12e6..e562662f87b 100644 --- a/scripting/engine_spidermonkey.cpp +++ b/scripting/engine_spidermonkey.cpp @@ -285,12 +285,14 @@ namespace mongo { jsval toval( const char * c ){ JSString * s = JS_NewStringCopyZ( _context , c ); + assert( s ); return STRING_TO_JSVAL( s ); } JSObject * toJSObject( const BSONObj * obj , bool readOnly=false ){ JSObject * o = JS_NewObject( _context , readOnly ? &bson_ro_class : &bson_class , NULL, NULL); - JS_SetPrivate( _context , o , (void*)(new BSONHolder( obj->getOwned() ) ) ); + assert( o ); + assert( JS_SetPrivate( _context , o , (void*)(new BSONHolder( obj->getOwned() ) ) ) ); return o; } @@ -314,14 +316,20 @@ namespace mongo { case Bool: return e.boolean() ? JSVAL_TRUE : JSVAL_FALSE; case Object:{ - BSONObj embed = e.embeddedObject(); + BSONObj embed = e.embeddedObject().getOwned(); return toval( &embed ); } case Array:{ - - BSONObj embed = e.embeddedObject(); + + BSONObj embed = e.embeddedObject().getOwned(); + if ( embed.isEmpty() ){ + return OBJECT_TO_JSVAL( JS_NewArrayObject( _context , 0 , 0 ) ); + } + int n = embed.nFields(); + assert( n > 0 ); + JSObject * array = JS_NewArrayObject( _context , embed.nFields() , 0 ); assert( array ); @@ -442,7 +450,7 @@ namespace mongo { BSONHolder * o = GETHOLDER( cx , obj ); if ( o ){ delete o; - JS_SetPrivate( cx , obj , 0 ); + assert( JS_SetPrivate( cx , obj , 0 ) ); } }