From 7f4146f3e26eeb1e205ef8b14627ec3285451816 Mon Sep 17 00:00:00 2001 From: James Chen Date: Fri, 11 Jan 2013 17:44:39 +0800 Subject: [PATCH] issue #1653: JS_ValueToInt32, JS_ValueToECMAInt32 --> jsval_to_int32 Using JSB_PRECONDITION2 to check the return value of js api. Reporting an error when binding api return JS_FALSE. --- .../javascript/bindings/cocos2d_specifics.cpp | 180 +++++++----------- ...s_chipmunk_auto_classes.cpp.REMOVED.git-id | 2 +- ...ings_chipmunk_functions.cpp.REMOVED.git-id | 2 +- .../bindings/js_bindings_chipmunk_manual.cpp | 72 +++---- .../javascript/bindings/js_bindings_config.h | 78 ++++---- .../bindings/js_manual_conversions.cpp | 60 +++--- 6 files changed, 183 insertions(+), 211 deletions(-) diff --git a/scripting/javascript/bindings/cocos2d_specifics.cpp b/scripting/javascript/bindings/cocos2d_specifics.cpp index ec9f0a7e9a..20788b6b30 100644 --- a/scripting/javascript/bindings/cocos2d_specifics.cpp +++ b/scripting/javascript/bindings/cocos2d_specifics.cpp @@ -1,6 +1,7 @@ #include "cocos2d.h" #include "cocos2d_specifics.hpp" #include +#include "js_bindings_config.h" schedFunc_proxy_t *_schedFunc_target_ht = NULL; schedTarget_proxy_t *_schedTarget_native_ht = NULL; @@ -181,9 +182,10 @@ JSBool js_cocos2dx_CCNode_getChildren(JSContext *cx, uint32_t argc, jsval *vp) } JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(jsarr)); + return JS_TRUE; } - return JS_TRUE; } + JS_ReportError(cx, "Error in js_cocos2dx_CCNode_getChildren"); return JS_FALSE; } @@ -243,6 +245,7 @@ JSBool js_cocos2dx_CCMenu_create(JSContext *cx, uint32_t argc, jsval *vp) JS_SET_RVAL(cx, vp, jsret); return JS_TRUE; } + JS_ReportError(cx, "wrong number of arguments"); return JS_FALSE; } @@ -281,6 +284,7 @@ JSBool js_cocos2dx_CCSequence_create(JSContext *cx, uint32_t argc, jsval *vp) JS_SET_RVAL(cx, vp, jsret); return JS_TRUE; } + JS_ReportError(cx, "wrong number of arguments"); return JS_FALSE; } @@ -319,6 +323,7 @@ JSBool js_cocos2dx_CCSpawn_create(JSContext *cx, uint32_t argc, jsval *vp) JS_SET_RVAL(cx, vp, jsret); return JS_TRUE; } + JS_ReportError(cx, "wrong number of arguments"); return JS_FALSE; } @@ -331,6 +336,7 @@ JSBool js_cocos2dx_CCMenuItem_create(JSContext *cx, uint32_t argc, jsval *vp) JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj)); return JS_TRUE; } + JS_ReportError(cx, "wrong number of arguments"); return JS_FALSE; } @@ -475,17 +481,20 @@ JSBool js_cocos2dx_CCMenuItemLabel_create(JSContext *cx, uint32_t argc, jsval *v JSBool js_cocos2dx_CCMenuItemAtlasFont_create(JSContext *cx, uint32_t argc, jsval *vp) { if (argc >= 5) { + JSBool ok = JS_TRUE; jsval *argv = JS_ARGV(cx, vp); JSStringWrapper arg0(argv[0]); JSStringWrapper arg1(argv[1]); - int arg2; if (!JS_ValueToInt32(cx, argv[2], &arg2)) return JS_FALSE; - int arg3; if (!JS_ValueToInt32(cx, argv[3], &arg3)) return JS_FALSE; - int arg4; if (!JS_ValueToInt32(cx, argv[4], &arg4)) return JS_FALSE; + int arg2; ok &= jsval_to_int32(cx, argv[2], &arg2); + int arg3; ok &= jsval_to_int32(cx, argv[3], &arg3); + int arg4; ok &= jsval_to_int32(cx, argv[4], &arg4); + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); cocos2d::CCMenuItemAtlasFont* ret = cocos2d::CCMenuItemAtlasFont::create(arg0, arg1, arg2, arg3, arg4); JSObject *obj = bind_menu_item(cx, ret, (argc >= 6 ? argv[5] : JSVAL_VOID), (argc == 7 ? argv[6] : JSVAL_VOID)); JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj)); return JS_TRUE; } + JS_ReportError(cx, "wrong number of arguments"); return JS_FALSE; } @@ -540,6 +549,7 @@ JSBool js_cocos2dx_CCMenuItemToggle_create(JSContext *cx, uint32_t argc, jsval * JS_SET_RVAL(cx, vp, jsret); return JS_TRUE; } + JS_ReportError(cx, "wrong number of arguments"); return JS_FALSE; } @@ -581,10 +591,7 @@ JSBool js_cocos2dx_CCAnimation_create(JSContext *cx, uint32_t argc, jsval *vp) cocos2d::CCArray* arg0; if (argc > 0) { ok &= jsval_to_ccarray(cx, argv[0], &arg0); - if (!ok) { - // TODO: Need to use JSB_PRECONDITION2 like which was done in cocos2d-iphone. - return JS_FALSE; - } + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); } cocos2d::CCAnimation* ret; double arg1 = 0.0f; @@ -596,7 +603,7 @@ JSBool js_cocos2dx_CCAnimation_create(JSContext *cx, uint32_t argc, jsval *vp) } else if (argc == 3) { unsigned int loops; JS_ValueToNumber(cx, argv[1], &arg1); - JS_ValueToECMAUint32(cx, argv[1], &loops); + jsval_to_uint32(cx, argv[1], &loops); ret = cocos2d::CCAnimation::create(arg0, arg1, loops); } else if (argc == 1) { ret = cocos2d::CCAnimation::createWithSpriteFrames(arg0); @@ -620,6 +627,7 @@ JSBool js_cocos2dx_CCAnimation_create(JSContext *cx, uint32_t argc, jsval *vp) JS_SET_RVAL(cx, vp, jsret); return JS_TRUE; } + JS_ReportError(cx, "wrong number of arguments"); return JS_FALSE; } @@ -629,10 +637,8 @@ JSBool js_cocos2dx_CCLayerMultiplex_create(JSContext *cx, uint32_t argc, jsval * cocos2d::CCArray* arg0; JSBool ok = JS_TRUE; ok &= jsvals_variadic_to_ccarray(cx, argv, argc, &arg0); - if (!ok) { - // TODO: Need to use JSB_PRECONDITION2 like which was done in cocos2d-iphone. - return JS_FALSE; - } + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + cocos2d::CCLayerMultiplex* ret = cocos2d::CCLayerMultiplex::createWithArray(arg0); jsval jsret; do { @@ -743,6 +749,7 @@ JSBool js_cocos2dx_CCNode_copy(JSContext *cx, uint32_t argc, jsval *vp) return JS_TRUE; } } + JS_ReportError(cx, "wrong number of arguments"); return JS_FALSE; } @@ -1137,8 +1144,7 @@ JSBool js_CCNode_unschedule(JSContext *cx, uint32_t argc, jsval *vp) js_proxy_t *proxy; JS_GET_NATIVE_PROXY(proxy, obj); cocos2d::CCNode *node = (cocos2d::CCNode *)(proxy ? proxy->ptr : NULL); - - if(!node) return JS_FALSE; + JSB_PRECONDITION2(node, cx, JS_FALSE, "Invalid Native Object"); CCScheduler *sched = node->getScheduler(); @@ -1562,6 +1568,7 @@ JSBool js_cocos2dx_retain(JSContext *cx, uint32_t argc, jsval *vp) return JS_TRUE; } } + JS_ReportError(cx, "Invalid Native Object."); return JS_FALSE; } @@ -1576,6 +1583,7 @@ JSBool js_cocos2dx_release(JSContext *cx, uint32_t argc, jsval *vp) return JS_TRUE; } } + JS_ReportError(cx, "Invalid Native Object."); return JS_FALSE; } @@ -1601,6 +1609,8 @@ JSBool js_cocos2dx_CCSet_constructor(JSContext *cx, uint32_t argc, jsval *vp) JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj)); return JS_TRUE; } + + JS_ReportError(cx, "Error in js_cocos2dx_CCSet_constructor"); return JS_FALSE; } @@ -1616,10 +1626,8 @@ JSBool js_cocos2dx_CCNode_setPosition(JSContext *cx, uint32_t argc, jsval *vp) if (argc == 1) { cocos2d::CCPoint arg0; ok &= jsval_to_ccpoint(cx, argv[0], &arg0); - if (!ok) { - // TODO: Need to use JSB_PRECONDITION2 like which was done in cocos2d-iphone. - return JS_FALSE; - } + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + cobj->setPosition(arg0); return JS_TRUE; } if (argc == 2) { @@ -1651,10 +1659,7 @@ JSBool js_cocos2dx_CCSprite_setPosition(JSContext *cx, uint32_t argc, jsval *vp) if (argc == 1) { cocos2d::CCPoint arg0; ok &= jsval_to_ccpoint(cx, argv[0], &arg0); - if (!ok) { - // TODO: Need to use JSB_PRECONDITION2 like which was done in cocos2d-iphone. - return JS_FALSE; - } + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); cobj->setPosition(arg0); return JS_TRUE; } if (argc == 2) { @@ -1695,6 +1700,7 @@ JSBool js_cocos2dx_CCTMXLayer_tileFlagsAt(JSContext *cx, uint32_t argc, jsval *v JS_SET_RVAL(cx, vp, jsret); return JS_TRUE; } + JS_ReportError(cx, "wrong number of arguments"); return JS_FALSE; } @@ -1885,10 +1891,8 @@ JSBool js_cocos2dx_ccpAdd(JSContext *cx, uint32_t argc, jsval *vp) ok &= jsval_to_ccpoint(cx, argv[0], &arg0); cocos2d::CCPoint arg1; ok &= jsval_to_ccpoint(cx, argv[1], &arg1); - if (!ok) { - // TODO: Need to use JSB_PRECONDITION2 like which was done in cocos2d-iphone. - return JS_FALSE; - } + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + CCPoint ret = ccpAdd(arg0, arg1); jsval jsret = ccpoint_to_jsval(cx, ret); @@ -1911,10 +1915,7 @@ JSBool js_cocos2dx_ccpDistance(JSContext *cx, uint32_t argc, jsval *vp) cocos2d::CCPoint arg1; ok &= jsval_to_ccpoint(cx, argv[1], &arg1); - if (!ok) { - // TODO: Need to use JSB_PRECONDITION2 like which was done in cocos2d-iphone. - return JS_FALSE; - } + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); float ret = ccpDistance(arg0, arg1); jsval jsret = DOUBLE_TO_JSVAL(ret); @@ -1937,10 +1938,7 @@ JSBool js_cocos2dx_ccpClamp(JSContext *cx, uint32_t argc, jsval *vp) ok &= jsval_to_ccpoint(cx, argv[1], &arg1); cocos2d::CCPoint arg2; ok &= jsval_to_ccpoint(cx, argv[2], &arg2); - if (!ok) { - // TODO: Need to use JSB_PRECONDITION2 like which was done in cocos2d-iphone. - return JS_FALSE; - } + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); CCPoint ret = ccpClamp(arg0, arg1, arg2); @@ -1960,10 +1958,7 @@ JSBool js_cocos2dx_ccpLengthSQ(JSContext *cx, uint32_t argc, jsval *vp) if (argc == 1) { cocos2d::CCPoint arg0; ok &= jsval_to_ccpoint(cx, argv[0], &arg0); - if (!ok) { - // TODO: Need to use JSB_PRECONDITION2 like which was done in cocos2d-iphone. - return JS_FALSE; - } + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); float ret = ccpLengthSQ(arg0); jsval jsret = DOUBLE_TO_JSVAL(ret); @@ -1983,10 +1978,7 @@ JSBool js_cocos2dx_ccpLength(JSContext *cx, uint32_t argc, jsval *vp) if (argc == 1) { cocos2d::CCPoint arg0; ok &= jsval_to_ccpoint(cx, argv[0], &arg0); - if (!ok) { - // TODO: Need to use JSB_PRECONDITION2 like which was done in cocos2d-iphone. - return JS_FALSE; - } + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); float ret = ccpLength(arg0); @@ -2007,10 +1999,7 @@ JSBool js_cocos2dx_ccpNeg(JSContext *cx, uint32_t argc, jsval *vp) if (argc == 1) { cocos2d::CCPoint arg0; ok &= jsval_to_ccpoint(cx, argv[0], &arg0); - if (!ok) { - // TODO: Need to use JSB_PRECONDITION2 like which was done in cocos2d-iphone. - return JS_FALSE; - } + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); CCPoint ret = ccpNeg(arg0); @@ -2033,10 +2022,8 @@ JSBool js_cocos2dx_ccpSub(JSContext *cx, uint32_t argc, jsval *vp) ok &= jsval_to_ccpoint(cx, argv[0], &arg0); cocos2d::CCPoint arg1; ok &= jsval_to_ccpoint(cx, argv[1], &arg1); - if (!ok) { - // TODO: Need to use JSB_PRECONDITION2 like which was done in cocos2d-iphone. - return JS_FALSE; - } + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + CCPoint ret = ccpSub(arg0, arg1); jsval jsret = ccpoint_to_jsval(cx, ret); @@ -2056,10 +2043,8 @@ JSBool js_cocos2dx_ccpMult(JSContext *cx, uint32_t argc, jsval *vp) if (argc == 2) { cocos2d::CCPoint arg0; ok &= jsval_to_ccpoint(cx, argv[0], &arg0); - if (!ok) { - // TODO: Need to use JSB_PRECONDITION2 like which was done in cocos2d-iphone. - return JS_FALSE; - } + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + double arg1; if( ! JS_ValueToNumber(cx, argv[1], &arg1) ) { return JS_FALSE; @@ -2087,10 +2072,8 @@ JSBool js_cocos2dx_ccpMidpoint(JSContext *cx, uint32_t argc, jsval *vp) ok &= jsval_to_ccpoint(cx, argv[0], &arg0); cocos2d::CCPoint arg1; ok &= jsval_to_ccpoint(cx, argv[1], &arg1); - if (!ok) { - // TODO: Need to use JSB_PRECONDITION2 like which was done in cocos2d-iphone. - return JS_FALSE; - } + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + CCPoint ret = ccpMidpoint(arg0, arg1); jsval jsret = ccpoint_to_jsval(cx, ret); @@ -2113,10 +2096,8 @@ JSBool js_cocos2dx_ccpDot(JSContext *cx, uint32_t argc, jsval *vp) ok &= jsval_to_ccpoint(cx, argv[0], &arg0); cocos2d::CCPoint arg1; ok &= jsval_to_ccpoint(cx, argv[1], &arg1); - if (!ok) { - // TODO: Need to use JSB_PRECONDITION2 like which was done in cocos2d-iphone. - return JS_FALSE; - } + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + float ret = ccpDot(arg0, arg1); jsval jsret = DOUBLE_TO_JSVAL(ret); @@ -2138,10 +2119,8 @@ JSBool js_cocos2dx_ccpCross(JSContext *cx, uint32_t argc, jsval *vp) ok &= jsval_to_ccpoint(cx, argv[0], &arg0); cocos2d::CCPoint arg1; ok &= jsval_to_ccpoint(cx, argv[1], &arg1); - if (!ok) { - // TODO: Need to use JSB_PRECONDITION2 like which was done in cocos2d-iphone. - return JS_FALSE; - } + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + float ret = ccpCross(arg0, arg1); jsval jsret = DOUBLE_TO_JSVAL(ret); @@ -2161,10 +2140,8 @@ JSBool js_cocos2dx_ccpPerp(JSContext *cx, uint32_t argc, jsval *vp) if (argc == 1) { cocos2d::CCPoint arg0; ok &= jsval_to_ccpoint(cx, argv[0], &arg0); - if (!ok) { - // TODO: Need to use JSB_PRECONDITION2 like which was done in cocos2d-iphone. - return JS_FALSE; - } + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + CCPoint ret = ccpPerp(arg0); jsval jsret = ccpoint_to_jsval(cx, ret); @@ -2185,10 +2162,8 @@ JSBool js_cocos2dx_ccpRPerp(JSContext *cx, uint32_t argc, jsval *vp) if (argc == 1) { cocos2d::CCPoint arg0; ok &= jsval_to_ccpoint(cx, argv[0], &arg0); - if (!ok) { - // TODO: Need to use JSB_PRECONDITION2 like which was done in cocos2d-iphone. - return JS_FALSE; - } + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + CCPoint ret = ccpRPerp(arg0); jsval jsret = ccpoint_to_jsval(cx, ret); @@ -2211,10 +2186,8 @@ JSBool js_cocos2dx_ccpProject(JSContext *cx, uint32_t argc, jsval *vp) ok &= jsval_to_ccpoint(cx, argv[0], &arg0); cocos2d::CCPoint arg1; ok &= jsval_to_ccpoint(cx, argv[1], &arg1); - if (!ok) { - // TODO: Need to use JSB_PRECONDITION2 like which was done in cocos2d-iphone. - return JS_FALSE; - } + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + CCPoint ret = ccpProject(arg0, arg1); jsval jsret = ccpoint_to_jsval(cx, ret); @@ -2236,10 +2209,8 @@ JSBool js_cocos2dx_ccpRotate(JSContext *cx, uint32_t argc, jsval *vp) ok &= jsval_to_ccpoint(cx, argv[0], &arg0); cocos2d::CCPoint arg1; ok &= jsval_to_ccpoint(cx, argv[1], &arg1); - if (!ok) { - // TODO: Need to use JSB_PRECONDITION2 like which was done in cocos2d-iphone. - return JS_FALSE; - } + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + CCPoint ret = ccpRotate(arg0, arg1); jsval jsret = ccpoint_to_jsval(cx, ret); @@ -2259,10 +2230,8 @@ JSBool js_cocos2dx_ccpNormalize(JSContext *cx, uint32_t argc, jsval *vp) if (argc == 1) { cocos2d::CCPoint arg0; ok &= jsval_to_ccpoint(cx, argv[0], &arg0); - if (!ok) { - // TODO: Need to use JSB_PRECONDITION2 like which was done in cocos2d-iphone. - return JS_FALSE; - } + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + CCPoint ret = ccpNormalize(arg0); jsval jsret = ccpoint_to_jsval(cx, ret); @@ -2317,8 +2286,8 @@ JSBool js_cocos2dx_setBlendFunc(JSContext *cx, uint32_t argc, jsval *vp) if (argc == 2) { GLenum src, dst; - JS_ValueToInt32(cx, argv[0], (int32_t*)&src); - JS_ValueToInt32(cx, argv[1], (int32_t*)&dst); + jsval_to_int32(cx, argv[0], (int32_t*)&src); + jsval_to_int32(cx, argv[1], (int32_t*)&dst); ccBlendFunc blendFunc = {src, dst}; cobj->setBlendFunc(blendFunc); return JS_TRUE; @@ -2381,13 +2350,12 @@ JSBool js_cocos2dx_CCTexture2D_setTexParameters(JSContext *cx, uint32_t argc, js GLint arg0, arg1, arg2, arg3; - ok &= JS_ValueToInt32(cx, *argvp++, &arg0); - ok &= JS_ValueToInt32(cx, *argvp++, &arg1); - ok &= JS_ValueToInt32(cx, *argvp++, &arg2); - ok &= JS_ValueToInt32(cx, *argvp++, &arg3); + ok &= jsval_to_int32(cx, *argvp++, &arg0); + ok &= jsval_to_int32(cx, *argvp++, &arg1); + ok &= jsval_to_int32(cx, *argvp++, &arg2); + ok &= jsval_to_int32(cx, *argvp++, &arg3); - if( ! ok ) - return JS_FALSE; + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); ccTexParams param = { arg0, arg1, arg2, arg3 }; @@ -2419,7 +2387,7 @@ JSBool js_cocos2dx_CCMenu_alignItemsInRows(JSContext *cx, uint32_t argc, jsval * JS_SET_RVAL(cx, vp, JSVAL_VOID); return JS_TRUE; } - + JS_ReportError(cx, "Error in js_cocos2dx_CCMenu_alignItemsInRows"); return JS_FALSE; } @@ -2440,7 +2408,7 @@ JSBool js_cocos2dx_CCMenu_alignItemsInColumns(JSContext *cx, uint32_t argc, jsva JS_SET_RVAL(cx, vp, JSVAL_VOID); return JS_TRUE; } - + JS_ReportError(cx, "Error in js_cocos2dx_CCMenu_alignItemsInColumns"); return JS_FALSE; } @@ -2460,10 +2428,7 @@ JSBool js_cocos2dx_CCTMXLayer_getTileFlagsAt(JSContext *cx, uint32_t argc, jsval ccTMXTileFlags flags; CCPoint arg0; ok &= jsval_to_ccpoint(cx, argv[0], &arg0); - if (!ok) { - // TODO: Need to use JSB_PRECONDITION2 like which was done in cocos2d-iphone. - return JS_FALSE; - } + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); cobj->tileGIDAt(arg0, &flags); JS_SET_RVAL(cx, vp, UINT_TO_JSVAL((uint32_t)flags)); @@ -2494,11 +2459,7 @@ JSBool js_cocos2dx_CCDrawNode_drawPolygon(JSContext *cx, uint32_t argc, jsval *v // Points ok &= JS_ValueToObject(cx, *argvp++, &argArray); - if( ! (argArray && JS_IsArrayObject(cx, argArray) ) ) - { - JS_ReportError(cx, "Vertex should be anArray object"); - return JS_FALSE; - } + JSB_PRECONDITION2( (argArray && JS_IsArrayObject(cx, argArray)) , cx, JS_FALSE, "Vertex should be anArray object"); // Color 4F ok &= jsval_to_cccolor4f(cx, *argvp++, &argFillColor); @@ -2509,10 +2470,7 @@ JSBool js_cocos2dx_CCDrawNode_drawPolygon(JSContext *cx, uint32_t argc, jsval *v // Color Border (4F) ok &= jsval_to_cccolor4f(cx, *argvp++, &argBorderColor); - if( ! ok ) - { - return JS_FALSE; - } + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error parsing arguments"); { uint32_t l; @@ -2539,7 +2497,7 @@ JSBool js_cocos2dx_CCDrawNode_drawPolygon(JSContext *cx, uint32_t argc, jsval *v } JS_ReportError(cx, "wrong number of arguments: %d, was expecting %d", argc, 4); - return JS_FALSE; + return JS_FALSE; } void register_cocos2dx_js_extensions(JSContext* cx, JSObject* global) diff --git a/scripting/javascript/bindings/js_bindings_chipmunk_auto_classes.cpp.REMOVED.git-id b/scripting/javascript/bindings/js_bindings_chipmunk_auto_classes.cpp.REMOVED.git-id index 80e4e1a4e2..3174249af2 100644 --- a/scripting/javascript/bindings/js_bindings_chipmunk_auto_classes.cpp.REMOVED.git-id +++ b/scripting/javascript/bindings/js_bindings_chipmunk_auto_classes.cpp.REMOVED.git-id @@ -1 +1 @@ -85427ffdec174f7577dee7163935cbc734493d9f \ No newline at end of file +9594a5677c70358b9e128381d6481eeed0e80723 \ No newline at end of file diff --git a/scripting/javascript/bindings/js_bindings_chipmunk_functions.cpp.REMOVED.git-id b/scripting/javascript/bindings/js_bindings_chipmunk_functions.cpp.REMOVED.git-id index 7171db3acb..1f199d643e 100644 --- a/scripting/javascript/bindings/js_bindings_chipmunk_functions.cpp.REMOVED.git-id +++ b/scripting/javascript/bindings/js_bindings_chipmunk_functions.cpp.REMOVED.git-id @@ -1 +1 @@ -825cd16f3b0732605930ab87034b777db43baa6f \ No newline at end of file +4364383f6fa186d74f05b8deff211e841ab0d2e1 \ No newline at end of file diff --git a/scripting/javascript/bindings/js_bindings_chipmunk_manual.cpp b/scripting/javascript/bindings/js_bindings_chipmunk_manual.cpp index ed2c890acf..e3dfcacbf1 100644 --- a/scripting/javascript/bindings/js_bindings_chipmunk_manual.cpp +++ b/scripting/javascript/bindings/js_bindings_chipmunk_manual.cpp @@ -168,13 +168,13 @@ void JSB_CCPhysicsDebugNode_finalize(JSFreeOp *fop, JSObject *obj) // Arguments: cpSpace* // Ret value: CCPhysicsDebugNode* (o) JSBool JSB_CCPhysicsDebugNode_debugNodeForCPSpace__static(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3( argc == 1, cx, JS_FALSE, "Invalid number of arguments" ); + JSB_PRECONDITION2( argc == 1, cx, JS_FALSE, "Invalid number of arguments" ); jsval *argvp = JS_ARGV(cx,vp); JSBool ok = JS_TRUE; cpSpace* arg0; ok &= jsval_to_opaque( cx, *argvp++, (void**)&arg0 ); - JSB_PRECONDITION3(ok, cx, JS_FALSE, "Error processing arguments"); + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); CCPhysicsDebugNode* ret = CCPhysicsDebugNode::create(arg0); jsval jsret; @@ -208,13 +208,13 @@ JSBool JSB_CCPhysicsDebugNode_setSpace_(JSContext *cx, uint32_t argc, jsval *vp) CCPhysicsDebugNode* real = (CCPhysicsDebugNode *)(proxy ? proxy->ptr : NULL); TEST_NATIVE_OBJECT(cx, real) - JSB_PRECONDITION3( argc == 1, cx, JS_FALSE, "Invalid number of arguments" ); + JSB_PRECONDITION2( argc == 1, cx, JS_FALSE, "Invalid number of arguments" ); jsval *argvp = JS_ARGV(cx,vp); JSBool ok = JS_TRUE; cpSpace* arg0; ok &= jsval_to_opaque( cx, *argvp++, (void**)&arg0 ); - JSB_PRECONDITION3(ok, cx, JS_FALSE, "Error processing arguments"); + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); real->setSpace(arg0); JS_SET_RVAL(cx, vp, JSVAL_VOID); @@ -229,7 +229,7 @@ JSBool JSB_CCPhysicsDebugNode_space(JSContext *cx, uint32_t argc, jsval *vp) { js_proxy_t *proxy; JS_GET_NATIVE_PROXY(proxy, jsthis); CCPhysicsDebugNode* real = (CCPhysicsDebugNode *)(proxy ? proxy->ptr : NULL); TEST_NATIVE_OBJECT(cx, real) - JSB_PRECONDITION3( argc == 0, cx, JS_FALSE, "Invalid number of arguments" ); + JSB_PRECONDITION2( argc == 0, cx, JS_FALSE, "Invalid number of arguments" ); cpSpace* ret_val; ret_val = real->getSpace(); @@ -844,7 +844,7 @@ JSBool __jsb_cpSpace_addCollisionHandler(JSContext *cx, jsval *vp, jsval *argvp, JSBool JSB_cpSpaceAddCollisionHandler(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==7, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==7, cx, JS_FALSE, "Invalid number of arguments"); jsval *argvp = JS_ARGV(cx,vp); @@ -860,7 +860,7 @@ JSBool JSB_cpSpaceAddCollisionHandler(JSContext *cx, uint32_t argc, jsval *vp) // method JSBool JSB_cpSpace_addCollisionHandler(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==6, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==6, cx, JS_FALSE, "Invalid number of arguments"); JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); JSB_PRECONDITION( jsthis, "Invalid jsthis object"); @@ -913,7 +913,7 @@ JSBool __jsb_cpSpace_removeCollisionHandler(JSContext *cx, jsval *vp, jsval *arg // Free function JSBool JSB_cpSpaceRemoveCollisionHandler(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==3, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==3, cx, JS_FALSE, "Invalid number of arguments"); jsval *argvp = JS_ARGV(cx,vp); @@ -928,7 +928,7 @@ JSBool JSB_cpSpaceRemoveCollisionHandler(JSContext *cx, uint32_t argc, jsval *vp // method JSBool JSB_cpSpace_removeCollisionHandler(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==2, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==2, cx, JS_FALSE, "Invalid number of arguments"); JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); JSB_PRECONDITION( jsthis, "Invalid jsthis object"); @@ -944,7 +944,7 @@ JSBool JSB_cpSpace_removeCollisionHandler(JSContext *cx, uint32_t argc, jsval *v // Arguments: cpBody* // Ret value: cpBody* JSBool JSB_cpSpace_addBody(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(jsthis); @@ -971,7 +971,7 @@ JSBool JSB_cpSpace_addBody(JSContext *cx, uint32_t argc, jsval *vp) { // Arguments: cpConstraint* // Ret value: cpConstraint* JSBool JSB_cpSpace_addConstraint(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(jsthis); @@ -998,7 +998,7 @@ JSBool JSB_cpSpace_addConstraint(JSContext *cx, uint32_t argc, jsval *vp) { // Arguments: cpShape* // Ret value: cpShape* JSBool JSB_cpSpace_addShape(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(jsthis); @@ -1025,7 +1025,7 @@ JSBool JSB_cpSpace_addShape(JSContext *cx, uint32_t argc, jsval *vp) { // Arguments: cpShape* // Ret value: cpShape* JSBool JSB_cpSpace_addStaticShape(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(jsthis); @@ -1054,7 +1054,7 @@ JSBool JSB_cpSpace_addStaticShape(JSContext *cx, uint32_t argc, jsval *vp) { // Arguments: cpBody* // Ret value: void JSBool JSB_cpSpace_removeBody(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(jsthis); @@ -1077,7 +1077,7 @@ JSBool JSB_cpSpace_removeBody(JSContext *cx, uint32_t argc, jsval *vp) { // Arguments: cpConstraint* // Ret value: void JSBool JSB_cpSpace_removeConstraint(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(jsthis); @@ -1100,7 +1100,7 @@ JSBool JSB_cpSpace_removeConstraint(JSContext *cx, uint32_t argc, jsval *vp) { // Arguments: cpShape* // Ret value: void JSBool JSB_cpSpace_removeShape(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(jsthis); @@ -1123,7 +1123,7 @@ JSBool JSB_cpSpace_removeShape(JSContext *cx, uint32_t argc, jsval *vp) { // Arguments: cpShape* // Ret value: void JSBool JSB_cpSpace_removeStaticShape(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(jsthis); @@ -1173,7 +1173,7 @@ JSBool __jsb_cpArbiter_getBodies(JSContext *cx, jsval *vp, jsval *argvp, cpArbit // Free function JSBool JSB_cpArbiterGetBodies(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); jsval *argvp = JS_ARGV(cx,vp); @@ -1187,7 +1187,7 @@ JSBool JSB_cpArbiterGetBodies(JSContext *cx, uint32_t argc, jsval *vp) // Method JSBool JSB_cpArbiter_getBodies(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==0, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==0, cx, JS_FALSE, "Invalid number of arguments"); JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); JSB_PRECONDITION( jsthis, "Invalid jsthis object"); @@ -1228,7 +1228,7 @@ JSBool __jsb_cpArbiter_getShapes(JSContext *cx, jsval *vp, jsval *argvp, cpArbit // function JSBool JSB_cpArbiterGetShapes(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); jsval *argvp = JS_ARGV(cx,vp); @@ -1242,7 +1242,7 @@ JSBool JSB_cpArbiterGetShapes(JSContext *cx, uint32_t argc, jsval *vp) // method JSBool JSB_cpArbiter_getShapes(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==0, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==0, cx, JS_FALSE, "Invalid number of arguments"); JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); JSB_PRECONDITION( jsthis, "Invalid jsthis object"); @@ -1259,7 +1259,7 @@ JSBool JSB_cpArbiter_getShapes(JSContext *cx, uint32_t argc, jsval *vp) // Manually added to identify static vs dynamic bodies JSBool JSB_cpBody_constructor(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==2, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==2, cx, JS_FALSE, "Invalid number of arguments"); JSObject *jsobj = JS_NewObject(cx, JSB_cpBody_class, JSB_cpBody_object, NULL); jsval *argvp = JS_ARGV(cx,vp); JSBool ok = JS_TRUE; @@ -1302,7 +1302,7 @@ JSBool __jsb_cpBody_getUserData(JSContext *cx, jsval *vp, jsval *argvp, cpBody * // free function JSBool JSB_cpBodyGetUserData(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); jsval *argvp = JS_ARGV(cx,vp); cpBody *body; @@ -1315,7 +1315,7 @@ JSBool JSB_cpBodyGetUserData(JSContext *cx, uint32_t argc, jsval *vp) // method JSBool JSB_cpBody_getUserData(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==0, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==0, cx, JS_FALSE, "Invalid number of arguments"); JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); JSB_PRECONDITION( jsthis, "Invalid jsthis object"); @@ -1346,7 +1346,7 @@ JSBool __jsb_cpBody_setUserData(JSContext *cx, jsval *vp, jsval *argvp, cpBody * // free function JSBool JSB_cpBodySetUserData(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==2, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==2, cx, JS_FALSE, "Invalid number of arguments"); jsval *argvp = JS_ARGV(cx,vp); cpBody *body; @@ -1358,7 +1358,7 @@ JSBool JSB_cpBodySetUserData(JSContext *cx, uint32_t argc, jsval *vp) // method JSBool JSB_cpBody_setUserData(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); JSB_PRECONDITION( jsthis, "Invalid jsthis object"); @@ -1373,14 +1373,14 @@ JSBool JSB_cpBody_setUserData(JSContext *cx, uint32_t argc, jsval *vp) // cpFloat cpAreaForPoly(const int numVerts, const cpVect *verts); JSBool JSB_cpAreaForPoly(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); jsval *argvp = JS_ARGV(cx,vp); JSBool ok = JS_TRUE; cpVect *verts; int numVerts; ok &= jsval_to_array_of_cpvect( cx, *argvp++, &verts, &numVerts); - JSB_PRECONDITION3(ok, cx, JS_FALSE, "Error parsing array"); + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error parsing array"); cpFloat area = cpAreaForPoly(numVerts, verts); @@ -1393,7 +1393,7 @@ JSBool JSB_cpAreaForPoly(JSContext *cx, uint32_t argc, jsval *vp) // cpFloat cpMomentForPoly(cpFloat m, int numVerts, const cpVect *verts, cpVect offset); JSBool JSB_cpMomentForPoly(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==3, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==3, cx, JS_FALSE, "Invalid number of arguments"); jsval *argvp = JS_ARGV(cx,vp); JSBool ok = JS_TRUE; cpVect *verts; cpVect offset; @@ -1404,7 +1404,7 @@ JSBool JSB_cpMomentForPoly(JSContext *cx, uint32_t argc, jsval *vp) ok &= jsval_to_array_of_cpvect( cx, *argvp++, &verts, &numVerts); ok &= jsval_to_cpVect( cx, *argvp++, (cpVect*) &offset ); - JSB_PRECONDITION3(ok, cx, JS_FALSE, "Error parsing args"); + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error parsing args"); cpFloat moment = cpMomentForPoly((cpFloat)m, numVerts, verts, offset); @@ -1417,14 +1417,14 @@ JSBool JSB_cpMomentForPoly(JSContext *cx, uint32_t argc, jsval *vp) // cpVect cpCentroidForPoly(const int numVerts, const cpVect *verts); JSBool JSB_cpCentroidForPoly(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); jsval *argvp = JS_ARGV(cx,vp); JSBool ok = JS_TRUE; cpVect *verts; int numVerts; ok &= jsval_to_array_of_cpvect( cx, *argvp++, &verts, &numVerts); - JSB_PRECONDITION3(ok, cx, JS_FALSE, "Error parsing args"); + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error parsing args"); cpVect centroid = cpCentroidForPoly(numVerts, verts); @@ -1452,7 +1452,7 @@ JSObject* JSB_cpBase_object = NULL; // Constructor JSBool JSB_cpBase_constructor(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3( argc==1, cx, JS_FALSE, "Invalid arguments. Expecting 1"); + JSB_PRECONDITION2( argc==1, cx, JS_FALSE, "Invalid arguments. Expecting 1"); JSObject *jsobj = JS_NewObject(cx, JSB_cpBase_class, JSB_cpBase_object, NULL); @@ -1484,7 +1484,7 @@ JSBool JSB_cpBase_getHandle(JSContext *cx, uint32_t argc, jsval *vp) { JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); JSB_PRECONDITION( jsthis, "Invalid jsthis object"); - JSB_PRECONDITION3(argc==0, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==0, cx, JS_FALSE, "Invalid number of arguments"); struct jsb_c_proxy_s* proxy = jsb_get_c_proxy_for_jsobject(jsthis); void *handle = proxy->handle; @@ -1498,7 +1498,7 @@ JSBool JSB_cpBase_setHandle(JSContext *cx, uint32_t argc, jsval *vp) { JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); JSB_PRECONDITION( jsthis, "Invalid jsthis object"); - JSB_PRECONDITION3(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); jsval *argvp = JS_ARGV(cx,vp); @@ -1549,7 +1549,7 @@ void JSB_cpBase_createClass(JSContext *cx, JSObject* globalObj, const char* name // Constructor JSBool JSB_cpPolyShape_constructor(JSContext *cx, uint32_t argc, jsval *vp) { - JSB_PRECONDITION3(argc==3, cx, JS_FALSE, "Invalid number of arguments"); + JSB_PRECONDITION2(argc==3, cx, JS_FALSE, "Invalid number of arguments"); JSObject *jsobj = JS_NewObject(cx, JSB_cpPolyShape_class, JSB_cpPolyShape_object, NULL); jsval *argvp = JS_ARGV(cx,vp); JSBool ok = JS_TRUE; diff --git a/scripting/javascript/bindings/js_bindings_config.h b/scripting/javascript/bindings/js_bindings_config.h index 9d8f7e5bd1..dc3591570c 100644 --- a/scripting/javascript/bindings/js_bindings_config.h +++ b/scripting/javascript/bindings/js_bindings_config.h @@ -28,7 +28,7 @@ /** @def JSB_ASSERT_ON_FAIL - Wheter or not to assert when the arguments or conversions are incorrect. + Whether or not to assert when the arguments or conversions are incorrect. It is recommened to turn it off in Release mode. */ #ifndef JSB_ASSERT_ON_FAIL @@ -39,42 +39,36 @@ #if JSB_ASSERT_ON_FAIL #define JSB_PRECONDITION( condition, error_msg) do { NSCAssert( condition, [NSString stringWithUTF8String:error_msg] ); } while(0) #define JSB_PRECONDITION2( condition, context, ret_value, error_msg) do { NSCAssert( condition, [NSString stringWithUTF8String:error_msg] ); } while(0) -#define JSB_PRECONDITION3( condition, context, ret_value, error_msg) do { NSCAssert( condition, [NSString stringWithUTF8String:error_msg] ); } while(0) #define ASSERT( condition, error_msg) do { NSCAssert( condition, [NSString stringWithUTF8String:error_msg] ); } while(0) #else -#define JSB_PRECONDITION( condition, error_msg) do { \ -if( ! (condition) ) { \ -cocos2d::CCLog("jsb: ERROR in %s: %s\n", __FUNCTION__, error_msg); \ -return JS_FALSE; \ -} \ +#define JSB_PRECONDITION( condition, ...) do { \ + if( ! (condition) ) { \ + cocos2d::CCLog("jsb: ERROR: File %s: Line: %d, Function: %s", __FILE__, __LINE__, __FUNCTION__ ); \ + cocos2d::CCLog(__VA_ARGS__); \ + JSContext* globalContext = ScriptingCore::getInstance()->getGlobalContext(); \ + if( ! JS_IsExceptionPending( globalContext ) ) { \ + JS_ReportError( globalContext, __VA_ARGS__ ); \ + } \ + return JS_FALSE; \ + } \ } while(0) -#define ASSERT( condition, error_msg) do { \ -if( ! (condition) ) { \ -cocos2d::CCLog("jsb: ERROR in %s: %s\n", __FUNCTION__, error_msg); \ -return false; \ -} \ -} while(0) -#define JSB_PRECONDITION2( condition, context, ret_value, error_msg) do { \ -if( ! (condition) ) { \ -cocos2d::CCLog("jsb: ERROR in %s: %s\n", __FUNCTION__, error_msg); \ -JS_ReportPendingException( context ); \ -return ret_value; \ -} \ -} while(0) -#define JSB_PRECONDITION3( condition, context, ret_value, error_msg) do { \ -if( ! (condition) ) { \ -cocos2d::CCLog("jsb: ERROR in %s: %s\n", __FUNCTION__, error_msg); \ -JS_ReportError( context, error_msg ); \ -return ret_value; \ -} \ -} while(0) -#define JSB_PRECONDITION( condition, error_msg) do { \ -if( ! (condition) ) { \ -cocos2d::CCLog("jsb: ERROR in %s: %s\n", __FUNCTION__, error_msg); \ -return JS_FALSE; \ -} \ +#define JSB_PRECONDITION2( condition, context, ret_value, ...) do { \ + if( ! (condition) ) { \ + cocos2d::CCLog("jsb: ERROR: File %s: Line: %d, Function: %s", __FILE__, __LINE__, __FUNCTION__ ); \ + cocos2d::CCLog(__VA_ARGS__); \ + if( ! JS_IsExceptionPending( context ) ) { \ + JS_ReportError( context, __VA_ARGS__ ); \ + } \ + return ret_value; \ + } \ } while(0) +#define ASSERT( condition, error_msg) do { \ + if( ! (condition) ) { \ + CCLOG("jsb: ERROR in %s: %s\n", __FUNCTION__, error_msg); \ + return false; \ + } \ + } while(0) #endif @@ -140,5 +134,25 @@ return JS_FALSE; \ #define JSB_INCLUDE_COCOSDENSHION 1 #endif // JSB_INCLUDE_COCOSDENSHION +/** @def JSB_ENABLE_DEBUGGER + Set this to 1 to enable the debugger + */ +#ifndef JSB_ENABLE_DEBUGGER +#define JSB_ENABLE_DEBUGGER 0 +#endif // JSB_ENABLE_DEBUGGER + +#if JSB_ENABLE_DEBUGGER +#define JSB_ENSURE_AUTOCOMPARTMENT(cx, obj) \ +JSAutoCompartment ac(cx, obj) +#else +#define JSB_ENSURE_AUTOCOMPARTMENT(cx, obj) +#endif + +/** @def JSB_INCLUDE_SYSTEM + Whether or not it should include bindings for system components like LocalStorage + */ +#ifndef JSB_INCLUDE_SYSTEM +#define JSB_INCLUDE_SYSTEM 1 +#endif // JSB_INCLUDE_SYSTEM #endif // __JS_BINDINGS_CONFIG_H diff --git a/scripting/javascript/bindings/js_manual_conversions.cpp b/scripting/javascript/bindings/js_manual_conversions.cpp index 16c1828298..a3158da026 100644 --- a/scripting/javascript/bindings/js_manual_conversions.cpp +++ b/scripting/javascript/bindings/js_manual_conversions.cpp @@ -28,7 +28,7 @@ JSBool jsval_to_opaque( JSContext *cx, jsval vp, void **r) #else assert( sizeof(int)==4); int32_t ret; - if( ! JS_ValueToInt32(cx, vp, &ret ) ) + if( ! jsval_to_int32(cx, vp, &ret ) ) return JS_FALSE; #endif *r = (void*)ret; @@ -43,7 +43,7 @@ JSBool jsval_to_int( JSContext *cx, jsval vp, int *ret ) long *tmp = (long*)ret; *tmp = 0; #endif - return JS_ValueToInt32(cx, vp, (int32_t*)ret); + return jsval_to_int32(cx, vp, (int32_t*)ret); } // XXX: sizeof(long) == 8 in 64 bits on OS X... apparently on Windows it is 32 bits (???) @@ -130,7 +130,7 @@ JSBool jsval_to_c_class( JSContext *cx, jsval vp, void **out_native, struct jsb_ { JSObject *jsobj; JSBool ok = JS_ValueToObject(cx, vp, &jsobj); - JSB_PRECONDITION3(ok, cx, JS_FALSE, "Error converting jsval to object"); + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error converting jsval to object"); struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(jsobj); *out_native = proxy->handle; @@ -147,7 +147,7 @@ JSBool jsval_to_uint( JSContext *cx, jsval vp, unsigned int *ret ) long *tmp = (long*)ret; *tmp = 0; #endif - return JS_ValueToInt32(cx, vp, (int32_t*)ret); + return jsval_to_int32(cx, vp, (int32_t*)ret); } jsval int_to_jsval( JSContext *cx, int number ) @@ -193,32 +193,32 @@ jsval longlong_to_jsval( JSContext *cx, long long number ) #endif } -JSBool jsval_to_charptr( JSContext *cx, jsval vp, const char **ret ) -{ - JSString *jsstr = JS_ValueToString( cx, vp ); - JSB_PRECONDITION2( jsstr, cx, JS_FALSE, "invalid string" ); - - // root it - vp = STRING_TO_JSVAL(jsstr); - - char *ptr = JS_EncodeString(cx, jsstr); - - JSB_PRECONDITION2(ptr, cx, JS_FALSE, "Error encoding string"); - - // XXX: It is converted to CCString and then back to char* to autorelease the created object. - CCString *tmp = CCString::create(ptr); - - JSB_PRECONDITION2( tmp, cx, JS_FALSE, "Error creating string from UTF8"); - - *ret = tmp->getCString(); - JS_free( cx, ptr ); - - return JS_TRUE; +JSBool jsval_to_charptr( JSContext *cx, jsval vp, const char **ret ) +{ + JSString *jsstr = JS_ValueToString( cx, vp ); + JSB_PRECONDITION2( jsstr, cx, JS_FALSE, "invalid string" ); + + // root it + vp = STRING_TO_JSVAL(jsstr); + + char *ptr = JS_EncodeString(cx, jsstr); + + JSB_PRECONDITION2(ptr, cx, JS_FALSE, "Error encoding string"); + + // XXX: It is converted to CCString and then back to char* to autorelease the created object. + CCString *tmp = CCString::create(ptr); + + JSB_PRECONDITION2( tmp, cx, JS_FALSE, "Error creating string from UTF8"); + + *ret = tmp->getCString(); + JS_free( cx, ptr ); + + return JS_TRUE; } -jsval charptr_to_jsval( JSContext *cx, const char *str) -{ - JSString *ret_obj = JS_NewStringCopyZ(cx, str); - return STRING_TO_JSVAL(ret_obj); -} +jsval charptr_to_jsval( JSContext *cx, const char *str) +{ + JSString *ret_obj = JS_NewStringCopyZ(cx, str); + return STRING_TO_JSVAL(ret_obj); +}