From 52ebd6ba116b09dac54901867340164e0c5e8874 Mon Sep 17 00:00:00 2001 From: janwas Date: Tue, 9 Aug 2005 16:02:15 +0000 Subject: [PATCH] scripting-interface improvements - strict param count checks - use ScriptingHost::RunMemScript instead of copy+pasted code - replace duplicated parameter access code with macros StringBuffer: use pointer instead of reference to allow compiler-generated copy ctor singleton: fix whitespace This was SVN commit r2586. --- .../graphics/scripting/JSInterface_Camera.cpp | 31 +++-- .../graphics/scripting/JSInterface_Camera.h | 6 +- source/gui/CGUI.cpp | 31 ++--- source/i18n/StringBuffer.cpp | 17 +-- source/i18n/StringBuffer.h | 11 +- .../maths/scripting/JSInterface_Vector3D.cpp | 119 +++++++++--------- source/ps/Singleton.h | 58 ++++----- source/scripting/ScriptGlue.cpp | 64 +++++----- 8 files changed, 159 insertions(+), 178 deletions(-) diff --git a/source/graphics/scripting/JSInterface_Camera.cpp b/source/graphics/scripting/JSInterface_Camera.cpp index 37c58ed89e..b6f7647b85 100755 --- a/source/graphics/scripting/JSInterface_Camera.cpp +++ b/source/graphics/scripting/JSInterface_Camera.cpp @@ -117,7 +117,7 @@ void JSI_Camera::Camera_Info::FreshenTarget() m_sv_Target = m_Data->GetFocus(); } -JSBool JSI_Camera::getCamera( JSContext* cx, JSObject* obj, jsval id, jsval* vp ) +JSBool JSI_Camera::getCamera( JSContext* cx, JSObject* UNUSED(obj), jsval UNUSED(id), jsval* vp ) { JSObject* camera = JS_NewObject( cx, &JSI_Camera::JSI_class, NULL, NULL ); JS_SetPrivate( cx, camera, new Camera_Info( g_Game->GetView()->GetCamera() ) ); @@ -125,7 +125,7 @@ JSBool JSI_Camera::getCamera( JSContext* cx, JSObject* obj, jsval id, jsval* vp return( JS_TRUE ); } -JSBool JSI_Camera::setCamera( JSContext* cx, JSObject* obj, jsval id, jsval* vp ) +JSBool JSI_Camera::setCamera( JSContext* cx, JSObject* UNUSED(obj), jsval UNUSED(id), jsval* vp ) { JSObject* camera = JSVAL_TO_OBJECT( *vp ); Camera_Info* cameraInfo; @@ -154,7 +154,7 @@ JSBool JSI_Camera::getProperty( JSContext* cx, JSObject* obj, jsval id, jsval* v CVector3D* d; - switch( g_ScriptingHost.ValueToInt( id ) ) + switch( ToPrimitive( id ) ) { case vector_position: d = &cameraInfo->m_sv_Position; break; case vector_orientation: d = &cameraInfo->m_sv_Orientation; break; @@ -187,7 +187,7 @@ JSBool JSI_Camera::setProperty( JSContext* cx, JSObject* obj, jsval id, jsval* v { cameraInfo->Freshen(); - switch( g_ScriptingHost.ValueToInt( id ) ) + switch( ToPrimitive( id ) ) { case vector_position: cameraInfo->m_sv_Position = *( v->vector ); break; case vector_orientation: cameraInfo->m_sv_Orientation = *( v->vector ); break; @@ -200,16 +200,15 @@ JSBool JSI_Camera::setProperty( JSContext* cx, JSObject* obj, jsval id, jsval* v return( JS_TRUE ); } -JSBool JSI_Camera::lookAt( JSContext* cx, JSObject* obj, unsigned int argc, jsval* argv, jsval* rval ) -{ - debug_assert( argc >= 2 ); +#define GETVECTOR( jv ) ( ( JSVAL_IS_OBJECT( jv ) && ( v = (JSI_Vector3D::Vector3D_Info*)JS_GetInstancePrivate( g_ScriptingHost.getContext(), JSVAL_TO_OBJECT( jv ), &JSI_Vector3D::JSI_class, NULL ) ) ) ? *(v->vector) : CVector3D() ) + +JSBool JSI_Camera::lookAt( JSContext* cx, JSObject* obj, uint argc, jsval* argv, jsval* rval ) +{ JSI_Vector3D::Vector3D_Info* v = NULL; Camera_Info* cameraInfo = (Camera_Info*)JS_GetPrivate( cx, obj ); -#define GETVECTOR( jv ) ( ( JSVAL_IS_OBJECT( jv ) && ( v = (JSI_Vector3D::Vector3D_Info*)JS_GetInstancePrivate( g_ScriptingHost.getContext(), JSVAL_TO_OBJECT( jv ), &JSI_Vector3D::JSI_class, NULL ) ) ) ? *(v->vector) : CVector3D() ) - - if( argc <= 3 ) + if( 2 <= argc && argc <= 3 ) { cameraInfo->m_sv_Position = GETVECTOR( argv[0] ); cameraInfo->m_sv_Orientation = ( GETVECTOR( argv[1] ) - GETVECTOR( argv[0] ) ); @@ -217,7 +216,7 @@ JSBool JSI_Camera::lookAt( JSContext* cx, JSObject* obj, unsigned int argc, jsva } else { - JS_ReportError( cx, "[Camera] Too many arguments to lookAt" ); + JS_ReportError( cx, "[Camera] lookAt: incorrect argument count" ); *rval = JSVAL_FALSE; return( JS_TRUE ); } @@ -231,15 +230,14 @@ JSBool JSI_Camera::lookAt( JSContext* cx, JSObject* obj, unsigned int argc, jsva cameraInfo->m_sv_Up = GETVECTOR( argv[2] ); } -#undef GETVECTOR - cameraInfo->Update(); *rval = JSVAL_TRUE; return( JS_TRUE ); } -JSBool JSI_Camera::getFocus( JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval ) +JSBool JSI_Camera::getFocus( JSContext* cx, JSObject* obj, + uintN UNUSED(argc), jsval* UNUSED(argv), jsval* rval ) { // Largely copied from the equivalent method in CCamera @@ -251,14 +249,13 @@ JSBool JSI_Camera::getFocus( JSContext* cx, JSObject* obj, uintN argc, jsval* ar return( JS_TRUE ); } -JSBool JSI_Camera::construct( JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval ) +JSBool JSI_Camera::construct( JSContext* cx, JSObject* UNUSED(obj), + uintN argc, jsval* argv, jsval* rval ) { JSI_Vector3D::Vector3D_Info* v = NULL; JSObject* camera = JS_NewObject( cx, &JSI_Camera::JSI_class, NULL, NULL ); -#define GETVECTOR( jv ) ( ( JSVAL_IS_OBJECT( jv ) && ( v = (JSI_Vector3D::Vector3D_Info*)JS_GetInstancePrivate( g_ScriptingHost.getContext(), JSVAL_TO_OBJECT( jv ), &JSI_Vector3D::JSI_class, NULL ) ) ) ? *(v->vector) : CVector3D() ) - if( argc == 0 ) { JS_SetPrivate( cx, camera, new Camera_Info() ); diff --git a/source/graphics/scripting/JSInterface_Camera.h b/source/graphics/scripting/JSInterface_Camera.h index 9e523bd69c..bef100c1e8 100755 --- a/source/graphics/scripting/JSInterface_Camera.h +++ b/source/graphics/scripting/JSInterface_Camera.h @@ -74,11 +74,11 @@ namespace JSI_Camera JSBool getCamera( JSContext* cx, JSObject* obj, jsval id, jsval* vp ); JSBool setCamera( JSContext* cx, JSObject* obj, jsval id, jsval* vp ); - JSBool construct( JSContext* cx, JSObject* obj, unsigned int argc, jsval* argv, jsval* rval ); + JSBool construct( JSContext* cx, JSObject* obj, uint argc, jsval* argv, jsval* rval ); void finalize( JSContext* cx, JSObject* obj ); - JSBool lookAt( JSContext* cx, JSObject* obj, unsigned int argc, jsval* argv, jsval* rval ); - JSBool getFocus( JSContext* cx, JSObject* obj, unsigned int argc, jsval* argv, jsval* rval ); + JSBool lookAt( JSContext* cx, JSObject* obj, uint argc, jsval* argv, jsval* rval ); + JSBool getFocus( JSContext* cx, JSObject* obj, uint argc, jsval* argv, jsval* rval ); void init(); }; diff --git a/source/gui/CGUI.cpp b/source/gui/CGUI.cpp index af76e19c76..053b6c099a 100755 --- a/source/gui/CGUI.cpp +++ b/source/gui/CGUI.cpp @@ -218,7 +218,7 @@ int CGUI::HandleEvent(const SDL_Event* ev) } catch (PS_RESULT e) { - UNUSED(e); + UNUSED2(e); debug_warn("CGUI::HandleEvent error"); // TODO Gee: Handle } @@ -433,7 +433,7 @@ void CGUI::Draw() } catch (PS_RESULT e) { - UNUSED(e); + UNUSED2(e); glPopMatrix(); // TODO Gee: Report error. @@ -445,9 +445,9 @@ void CGUI::Draw() void CGUI::DrawSprite(CGUISpriteInstance& Sprite, int CellID, - const float &Z, - const CRect &Rect, - const CRect &Clipping) + const float& Z, + const CRect& Rect, + const CRect& UNUSED(Clipping)) { // If the sprite doesn't exist (name == ""), don't bother drawing anything if (Sprite.IsEmpty()) @@ -477,7 +477,7 @@ void CGUI::Destroy() } catch (PS_RESULT e) { - UNUSED(e); + UNUSED2(e); debug_warn("CGUI::Destroy error"); // TODO Gee: Handle } @@ -1384,27 +1384,12 @@ void CGUI::Xeromyces_ReadScript(XMBElement Element, CXeromyces* pFile) // If there is a file specified, open and execute it if (file.Length()) - { - CVFSFile scriptfile; - if (scriptfile.Load(file) != PSRETURN_OK) - { - LOG(ERROR, LOG_CATEGORY, "Error opening script file '%s'", file.c_str()); - throw PSERROR_GUI_JSOpenFailed(); - } - - jsval result; - JS_EvaluateScript(g_ScriptingHost.getContext(), m_ScriptObject, (const char*)scriptfile.GetBuffer(), (int)scriptfile.GetBufferSize(), file, 1, &result); - } + g_ScriptingHost.RunScript(file, m_ScriptObject); // Execute inline scripts CStr code (Element.getText()); - if (code.Length()) - { - jsval result; - // TODO: Report the filename - JS_EvaluateScript(g_ScriptingHost.getContext(), m_ScriptObject, code.c_str(), (int)code.Length(), "Some XML file", Element.getLineNumber(), &result); - } + g_ScriptingHost.RunMemScript(code.c_str(), code.Length(), "Some XML file", Element.getLineNumber(), m_ScriptObject); } void CGUI::Xeromyces_ReadSprite(XMBElement Element, CXeromyces* pFile) diff --git a/source/i18n/StringBuffer.cpp b/source/i18n/StringBuffer.cpp index 83e5abd88e..da15870c08 100755 --- a/source/i18n/StringBuffer.cpp +++ b/source/i18n/StringBuffer.cpp @@ -25,7 +25,7 @@ I18n::StringBuffer::operator Str() g_UsedCache = false; #endif - if (Variables.size() != String.VarCount) + if (Variables.size() != String->VarCount) { LOG(ERROR, LOG_CATEGORY, "I18n: Incorrect number of parameters passed to Translate"); @@ -35,9 +35,9 @@ I18n::StringBuffer::operator Str() return L"(translation error)"; } - if (String.VarCount == 0) - if (String.Parts.size()) - return String.Parts[0]->ToString(Locale, Variables).str(); + if (String->VarCount == 0) + if (String->Parts.size()) + return String->Parts[0]->ToString(Locale, Variables).str(); else return Str(); @@ -58,8 +58,8 @@ I18n::StringBuffer::operator Str() } // Not in cache - construct the string - for (std::vector::iterator it = String.Parts.begin(), - end = String.Parts.end(); + for (std::vector::iterator it = String->Parts.begin(), + end = String->Parts.end(); it != end; ++it) { ret += (*it)->ToString(Locale, Variables).str(); @@ -70,11 +70,6 @@ I18n::StringBuffer::operator Str() return ret; } -I18n::StringBuffer::StringBuffer(TranslatedString& str, CLocale* loc) - : String(str), Locale(loc) -{ -} - u32 I18n::StringBuffer::Hash() { u32 hash = 0; diff --git a/source/i18n/StringBuffer.h b/source/i18n/StringBuffer.h index a0d97c134d..368a7c4306 100755 --- a/source/i18n/StringBuffer.h +++ b/source/i18n/StringBuffer.h @@ -41,10 +41,17 @@ namespace I18n u32 Hash(); private: - StringBuffer(TranslatedString&, CLocale*); - TranslatedString& String; + TranslatedString* String; + // pointer instead of reference allows assignment. + // this class is returned by value, so it's nicer for the + // compiler-generated copy ctor to be used. std::vector Variables; CLocale* Locale; + + StringBuffer(TranslatedString* str, CLocale* loc) + : String(str), Locale(loc) + { + } }; } diff --git a/source/maths/scripting/JSInterface_Vector3D.cpp b/source/maths/scripting/JSInterface_Vector3D.cpp index 3690b3ca1a..a648dbe9c9 100755 --- a/source/maths/scripting/JSInterface_Vector3D.cpp +++ b/source/maths/scripting/JSInterface_Vector3D.cpp @@ -106,7 +106,7 @@ JSBool JSI_Vector3D::getProperty( JSContext* cx, JSObject* obj, jsval id, jsval* if( vectorInfo->owner && vectorInfo->freshenFn ) ( (vectorInfo->owner)->*(vectorInfo->freshenFn) )(); - switch( g_ScriptingHost.ValueToInt( id ) ) + switch( ToPrimitive( id ) ) { case component_x: *vp = DOUBLE_TO_JSVAL( JS_NewDouble( cx, vectorData->X ) ); return( JS_TRUE ); case component_y: *vp = DOUBLE_TO_JSVAL( JS_NewDouble( cx, vectorData->Y ) ); return( JS_TRUE ); @@ -131,11 +131,11 @@ JSBool JSI_Vector3D::setProperty( JSContext* cx, JSObject* obj, jsval id, jsval* if( vectorInfo->owner && vectorInfo->freshenFn ) ( (vectorInfo->owner)->*(vectorInfo->freshenFn) )(); - switch( g_ScriptingHost.ValueToInt( id ) ) + switch( ToPrimitive( id ) ) { - case component_x: vectorData->X = (float)g_ScriptingHost.ValueToDouble( *vp ); break; - case component_y: vectorData->Y = (float)g_ScriptingHost.ValueToDouble( *vp ); break; - case component_z: vectorData->Z = (float)g_ScriptingHost.ValueToDouble( *vp ); break; + case component_x: vectorData->X = ToPrimitive( *vp ); break; + case component_y: vectorData->Y = ToPrimitive( *vp ); break; + case component_z: vectorData->Z = ToPrimitive( *vp ); break; } @@ -144,7 +144,7 @@ JSBool JSI_Vector3D::setProperty( JSContext* cx, JSObject* obj, jsval id, jsval* return( JS_TRUE ); } -JSBool JSI_Vector3D::construct( JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval ) +JSBool JSI_Vector3D::construct( JSContext* cx, JSObject* UNUSED(obj), uintN argc, jsval* argv, jsval* rval ) { JSObject* vector = JS_NewObject( cx, &JSI_Vector3D::JSI_class, NULL, NULL ); @@ -158,9 +158,9 @@ JSBool JSI_Vector3D::construct( JSContext* cx, JSObject* obj, uintN argc, jsval* { try { - float x = (float)g_ScriptingHost.ValueToDouble( argv[0] ); - float y = (float)g_ScriptingHost.ValueToDouble( argv[1] ); - float z = (float)g_ScriptingHost.ValueToDouble( argv[2] ); + float x = ToPrimitive( argv[0] ); + float y = ToPrimitive( argv[1] ); + float z = ToPrimitive( argv[2] ); JS_SetPrivate( cx, vector, new Vector3D_Info( x, y, z ) ); *rval = OBJECT_TO_JSVAL( vector ); return( JS_TRUE ); @@ -186,7 +186,8 @@ void JSI_Vector3D::finalize( JSContext* cx, JSObject* obj ) delete( (Vector3D_Info*)JS_GetPrivate( cx, obj ) ); } -JSBool JSI_Vector3D::toString( JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval ) +JSBool JSI_Vector3D::toString( JSContext* cx, JSObject* obj, + uintN UNUSED(argc), jsval* UNUSED(argv), jsval* rval ) { char buffer[256]; Vector3D_Info* vectorInfo = (Vector3D_Info*)JS_GetPrivate( cx, obj ); @@ -214,15 +215,35 @@ CVector3D* JSI_Vector3D::GetVector( JSContext* cx, JSObject* obj ) return( vectorInfo->vector ); } +#define GET_VECTORS\ + CVector3D* a = GetVector( cx, obj );\ + if(!a)\ + return( JS_TRUE );\ + if( ( argc == 0 ) || !JSVAL_IS_OBJECT( argv[0] ) )\ + {\ +invalid_param:\ + JS_ReportError( cx, "[Vector3D] Invalid parameter" );\ + return( JS_TRUE );\ + }\ + CVector3D* b = GetVector( cx, JSVAL_TO_OBJECT( argv[0] ) );\ + if(!b)\ + goto invalid_param; + +#define GET_VECTOR_AND_FLOAT\ + CVector3D* v = GetVector( cx, obj );\ + if(!v)\ + return( JS_TRUE );\ + float f;\ + if( ( argc == 0 ) || !ToPrimitive( cx, argv[0], f ) )\ + {\ + JS_ReportError( cx, "Invalid parameter" );\ + return( JS_TRUE );\ + } + + JSBool JSI_Vector3D::add( JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval ) { - CVector3D *a, *b; - if( !( a = GetVector( cx, obj ) ) ) return( JS_TRUE ); - if( ( argc == 0 ) || !JSVAL_IS_OBJECT( argv[0] ) || !( b = GetVector( cx, JSVAL_TO_OBJECT( argv[0] ) ) ) ) - { - JS_ReportError( cx, "[Vector3D] Invalid parameter" ); - return( JS_TRUE ); - } + GET_VECTORS; JSObject* vector3d = JS_NewObject( g_ScriptingHost.getContext(), &JSI_Vector3D::JSI_class, NULL, NULL ); JS_SetPrivate( g_ScriptingHost.getContext(), vector3d, new JSI_Vector3D::Vector3D_Info( *a + *b ) ); @@ -233,13 +254,7 @@ JSBool JSI_Vector3D::add( JSContext* cx, JSObject* obj, uintN argc, jsval* argv, JSBool JSI_Vector3D::subtract( JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval ) { - CVector3D *a, *b; - if( !( a = GetVector( cx, obj ) ) ) return( JS_TRUE ); - if( ( argc == 0 ) || !JSVAL_IS_OBJECT( argv[0] ) || !( b = GetVector( cx, JSVAL_TO_OBJECT( argv[0] ) ) ) ) - { - JS_ReportError( cx, "[Vector3D] Invalid parameter" ); - return( JS_TRUE ); - } + GET_VECTORS; JSObject* vector3d = JS_NewObject( g_ScriptingHost.getContext(), &JSI_Vector3D::JSI_class, NULL, NULL ); JS_SetPrivate( g_ScriptingHost.getContext(), vector3d, new JSI_Vector3D::Vector3D_Info( *a - *b ) ); @@ -248,10 +263,12 @@ JSBool JSI_Vector3D::subtract( JSContext* cx, JSObject* obj, uintN argc, jsval* return( JS_TRUE ); } -JSBool JSI_Vector3D::negate( JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval ) +JSBool JSI_Vector3D::negate( JSContext* cx, JSObject* obj, + uintN UNUSED(argc), jsval* UNUSED(argv), jsval* rval ) { - CVector3D *v; - if( !( v = GetVector( cx, obj ) ) ) return( JS_TRUE ); + CVector3D* v = GetVector( cx, obj ); + if(!v) + return( JS_TRUE ); *rval = ToJSVal( -( *v ) ); @@ -260,13 +277,7 @@ JSBool JSI_Vector3D::negate( JSContext* cx, JSObject* obj, uintN argc, jsval* ar JSBool JSI_Vector3D::scale( JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval ) { - CVector3D *v; float f; - if( !( v = GetVector( cx, obj ) ) ) return( JS_TRUE ); - if( ( argc == 0 ) || !ToPrimitive( cx, argv[0], f ) ) - { - JS_ReportError( cx, "Invalid parameter" ); - return( JS_TRUE ); - } + GET_VECTOR_AND_FLOAT; JSObject* vector3d = JS_NewObject( g_ScriptingHost.getContext(), &JSI_Vector3D::JSI_class, NULL, NULL ); JS_SetPrivate( g_ScriptingHost.getContext(), vector3d, new JSI_Vector3D::Vector3D_Info( *v * f ) ); @@ -277,13 +288,7 @@ JSBool JSI_Vector3D::scale( JSContext* cx, JSObject* obj, uintN argc, jsval* arg JSBool JSI_Vector3D::divide( JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval ) { - CVector3D *v; float f; - if( !( v = GetVector( cx, obj ) ) ) return( JS_TRUE ); - if( ( argc == 0 ) || !ToPrimitive( cx, argv[0], f ) ) - { - JS_ReportError( cx, "Invalid parameter" ); - return( JS_TRUE ); - } + GET_VECTOR_AND_FLOAT; JSObject* vector3d = JS_NewObject( g_ScriptingHost.getContext(), &JSI_Vector3D::JSI_class, NULL, NULL ); JS_SetPrivate( g_ScriptingHost.getContext(), vector3d, new JSI_Vector3D::Vector3D_Info( *v * ( 1.0f / f ) ) ); @@ -294,13 +299,7 @@ JSBool JSI_Vector3D::divide( JSContext* cx, JSObject* obj, uintN argc, jsval* ar JSBool JSI_Vector3D::dot( JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval ) { - CVector3D *a, *b; - if( !( a = GetVector( cx, obj ) ) ) return( JS_TRUE ); - if( ( argc == 0 ) || !JSVAL_IS_OBJECT( argv[0] ) || !( b = GetVector( cx, JSVAL_TO_OBJECT( argv[0] ) ) ) ) - { - JS_ReportError( cx, "[Vector3D] Invalid parameter" ); - return( JS_TRUE ); - } + GET_VECTORS; *rval = ToJSVal( a->Dot( *b ) ); return( JS_TRUE ); @@ -308,31 +307,29 @@ JSBool JSI_Vector3D::dot( JSContext* cx, JSObject* obj, uintN argc, jsval* argv, JSBool JSI_Vector3D::cross( JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval ) { - CVector3D *a, *b; - if( !( a = GetVector( cx, obj ) ) ) return( JS_TRUE ); - if( ( argc == 0 ) || !JSVAL_IS_OBJECT( argv[0] ) || !( b = GetVector( cx, JSVAL_TO_OBJECT( argv[0] ) ) ) ) - { - JS_ReportError( cx, "[Vector3D] Invalid parameter" ); - return( JS_TRUE ); - } + GET_VECTORS; *rval = ToJSVal( a->Cross( *b ) ); return( JS_TRUE ); } -JSBool JSI_Vector3D::length( JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval ) +JSBool JSI_Vector3D::length( JSContext* cx, JSObject* obj, + uintN UNUSED(argc), jsval* UNUSED(argv), jsval* rval ) { - CVector3D *v; - if( !( v = GetVector( cx, obj ) ) ) return( JS_TRUE ); + CVector3D* v = GetVector( cx, obj ); + if(!v) + return( JS_TRUE ); *rval = ToJSVal( v->GetLength() ); return( JS_TRUE ); } -JSBool JSI_Vector3D::normalize( JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval ) +JSBool JSI_Vector3D::normalize( JSContext* cx, JSObject* obj, + uintN UNUSED(argc), jsval* UNUSED(argv), jsval* rval ) { - CVector3D *v; - if( !( v = GetVector( cx, obj ) ) ) return( JS_TRUE ); + CVector3D* v = GetVector( cx, obj ); + if(!v) + return( JS_TRUE ); CVector3D r( v->X, v->Y, v->Z ); r.Normalize(); diff --git a/source/ps/Singleton.h b/source/ps/Singleton.h index 37364ecec4..dd4d337f2a 100755 --- a/source/ps/Singleton.h +++ b/source/ps/Singleton.h @@ -24,41 +24,41 @@ template class Singleton { - static T* ms_singleton; + static T* ms_singleton; - public: - Singleton() - { - debug_assert( !ms_singleton ); +public: + Singleton() + { + debug_assert( !ms_singleton ); - //use a cunning trick to get the singleton pointing to the start of - //the whole, rather than the start of the Singleton part of the object - uintptr_t offset = (uintptr_t)(T*)1 - (uintptr_t)(Singleton*)(T*)1; - ms_singleton = (T*)((uintptr_t)this + offset); - } + // use a cunning trick to get the singleton pointing to the start of + // the whole, rather than the start of the Singleton part of the object + uintptr_t offset = (uintptr_t)(T*)1 - (uintptr_t)(Singleton*)(T*)1; + ms_singleton = (T*)((uintptr_t)this + offset); + } - ~Singleton() - { - debug_assert( ms_singleton ); - ms_singleton=0; - } + ~Singleton() + { + debug_assert( ms_singleton ); + ms_singleton = 0; + } - static T& GetSingleton() - { - debug_assert( ms_singleton ); - return *ms_singleton; - } + static T& GetSingleton() + { + debug_assert( ms_singleton ); + return *ms_singleton; + } - static T* GetSingletonPtr() - { - debug_assert( ms_singleton ); - return ms_singleton; - } + static T* GetSingletonPtr() + { + debug_assert( ms_singleton ); + return ms_singleton; + } - static bool IsInitialised() - { - return (ms_singleton != 0); - } + static bool IsInitialised() + { + return (ms_singleton != 0); + } }; template diff --git a/source/scripting/ScriptGlue.cpp b/source/scripting/ScriptGlue.cpp index 27644e8ba7..e25400e582 100755 --- a/source/scripting/ScriptGlue.cpp +++ b/source/scripting/ScriptGlue.cpp @@ -62,7 +62,7 @@ extern CConsole* g_Console; } // .. require 0 params (avoids L4 warning "unused argv param") #define REQUIRE_NO_PARAMS(func_name)\ - UNUSED(argv);\ + UNUSED2(argv);\ if(argc != 0)\ {\ JS_ReportError(cx, #func_name ": number of parameters passed doesn't match expected count");\ @@ -94,7 +94,7 @@ extern CConsole* g_Console; // notes: // - Each argument is converted to a string and then written to the log. // - Output is in NORMAL style (see LOG). -JSBool WriteLog(JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSEDPARAM(rval)) +JSBool WriteLog(JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSED(rval)) { REQUIRE_MIN_PARAMS(1, WriteLog); @@ -136,7 +136,7 @@ JSBool getEntityByHandle( JSContext* cx, JSObject*, uint argc, jsval* argv, jsva i32 handle; try { - handle = g_ScriptingHost.ValueToInt( argv[0] ); + handle = ToPrimitive( argv[0] ); } catch( PSERROR_Scripting_ConversionFailed ) { @@ -222,7 +222,7 @@ JSBool issueCommand( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* rv // Register a global handler for the specified DOM event. // params: event type name [wstring], handler [fragment or function] // returns: whether it was actually newly registered [bool] -JSBool AddGlobalHandler( JSContext* cx, JSObject* obj, uint argc, jsval* argv, jsval* rval ) +JSBool AddGlobalHandler( JSContext* cx, JSObject* UNUSED(obj), uint argc, jsval* argv, jsval* rval ) { REQUIRE_PARAMS(2, AddGlobalHandler); @@ -234,7 +234,7 @@ JSBool AddGlobalHandler( JSContext* cx, JSObject* obj, uint argc, jsval* argv, j // Remove a previously registered global handler for the specified DOM event. // params: event type name [wstring], handler [fragment or function] // returns: whether it was successfully removed [bool] -JSBool RemoveGlobalHandler( JSContext* cx, JSObject* obj, uint argc, jsval* argv, jsval* rval ) +JSBool RemoveGlobalHandler( JSContext* cx, JSObject* UNUSED(obj), uint argc, jsval* argv, jsval* rval ) { REQUIRE_PARAMS(2, RemoveGlobalHandler); @@ -263,14 +263,14 @@ JSBool RemoveGlobalHandler( JSContext* cx, JSObject* obj, uint argc, jsval* argv // The called function or script executes in the same scope as the // code that called setTimeout (amongst other things, the // 'this' reference is usually maintained) -JSBool setTimeout( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSEDPARAM(rval) ) +JSBool setTimeout( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSED(rval) ) { REQUIRE_PARAMS(2, setTimeout); size_t delay; try { - delay = g_ScriptingHost.ValueToInt( argv[1] ); + delay = ToPrimitive( argv[1] ); } catch( PSERROR_Scripting_ConversionFailed ) { @@ -305,7 +305,7 @@ JSBool setTimeout( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUS // returns: // notes: // - setTimeout's notes apply here as well. -JSBool setInterval( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSEDPARAM(rval) ) +JSBool setInterval( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSED(rval) ) { REQUIRE_MIN_PARAMS(2, setInterval); REQUIRE_MAX_PARAMS(3, setInterval); @@ -313,11 +313,11 @@ JSBool setInterval( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNU size_t first, interval; try { - first = g_ScriptingHost.ValueToInt( argv[1] ); + first = ToPrimitive( argv[1] ); if( argc == 3 ) { // toDo, first, interval - interval = g_ScriptingHost.ValueToInt( argv[2] ); + interval = ToPrimitive( argv[2] ); } else { @@ -359,7 +359,7 @@ JSBool setInterval( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNU // notes: // - Execution continues until the end of the triggered function or // script fragment, but is not triggered again. -JSBool cancelInterval( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSEDPARAM(rval) ) +JSBool cancelInterval( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSED(rval) ) { REQUIRE_NO_PARAMS(cancelInterval); @@ -452,7 +452,7 @@ JSBool startGame(JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* rval) // Immediately ends the current game (if any). // params: // returns: -JSBool endGame(JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSEDPARAM(rval)) +JSBool endGame(JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSED(rval)) { REQUIRE_NO_PARAMS(endGame); @@ -473,7 +473,7 @@ JSBool endGame(JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSEDPA // Replaces the current language (locale) with a new one. // params: language id [string] as in I18n::LoadLanguage // returns: -JSBool loadLanguage(JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSEDPARAM(rval)) +JSBool loadLanguage(JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSED(rval)) { REQUIRE_PARAMS(1, loadLanguage); @@ -514,7 +514,7 @@ JSBool getLanguageID(JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* rv // notes: // - currently implemented via access violation (read of address 0) // - useful for testing the crashlog/stack trace code. -JSBool crash(JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSEDPARAM(rval)) +JSBool crash(JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSED(rval)) { REQUIRE_NO_PARAMS(crash); @@ -528,7 +528,7 @@ JSBool crash(JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSEDPARA // returns: true [bool] // notes: // - writes an indication of how long this took to the console. -JSBool forceGC( JSContext* cx, JSObject* obj, uint argc, jsval* argv, jsval* rval ) +JSBool forceGC( JSContext* cx, JSObject* UNUSED(obj), uint argc, jsval* argv, jsval* rval ) { REQUIRE_NO_PARAMS(forceGC); @@ -585,7 +585,7 @@ JSBool getFPS( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* rval ) // notes: // - Exit happens after the current main loop iteration ends // (since this only sets a flag telling it to end) -JSBool exitProgram( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSEDPARAM(rval) ) +JSBool exitProgram( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSED(rval) ) { REQUIRE_NO_PARAMS(exitProgram); @@ -601,11 +601,11 @@ JSBool exitProgram( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNU // - Not supported on all platforms. // - Only a rough approximation; do not base low-level decisions // ("should I allocate one more texture?") on this. -JSBool vmem( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSEDPARAM(rval) ) +JSBool vmem( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSED(rval) ) { REQUIRE_NO_PARAMS(vmem); -#ifdef _WIN32 +#if OS_WIN int left, total; if (GetVRAMInfo(left, total)) g_Console->InsertMessage(L"VRAM: used %d, total %d, free %d", total-left, total, left); @@ -623,7 +623,7 @@ JSBool vmem( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSEDPARA // returns: // notes: // - Cursors are stored in "art\textures\cursors" -JSBool setCursor( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSEDPARAM(rval) ) +JSBool setCursor( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSED(rval) ) { REQUIRE_PARAMS(1, setCursor); @@ -637,7 +637,7 @@ JSBool setCursor( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSE // returns: // notes: // - Usefulness is unclear. If you need it, consider renaming this and updating the docs. -JSBool _rewriteMaps( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSEDPARAM(rval) ) +JSBool _rewriteMaps( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSED(rval) ) { REQUIRE_NO_PARAMS(_rewriteMaps); @@ -652,11 +652,11 @@ JSBool _rewriteMaps( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UN // notes: // - value is as required by GL_TEXTURE_LOD_BIAS. // - useful for adjusting image "sharpness" (since it affects which mipmap level is chosen) -JSBool _lodbias( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSEDPARAM(rval) ) +JSBool _lodbias( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSED(rval) ) { REQUIRE_PARAMS(1, _lodbias); - g_Renderer.SetOptionFloat(CRenderer::OPT_LODBIAS, (float)g_ScriptingHost.ValueToDouble(argv[0])); + g_Renderer.SetOptionFloat(CRenderer::OPT_LODBIAS, ToPrimitive(argv[0])); return JS_TRUE; } @@ -664,13 +664,13 @@ JSBool _lodbias( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* UNUSED // Focus the game camera on a given position. // params: target position vector [CVector3D] // returns: success [bool] -JSBool setCameraTarget( JSContext* cx, JSObject* obj, uint argc, jsval* argv, jsval* rval ) +JSBool setCameraTarget( JSContext* cx, JSObject* UNUSED(obj), uint argc, jsval* argv, jsval* rval ) { REQUIRE_PARAMS(1, setCameraTarget); *rval = JSVAL_NULL; - CVector3D* target; - if( !( target = ToNative( argv[0] ) ) ) + CVector3D* target = ToNative( argv[0] ); + if(!target) { JS_ReportError( cx, "Invalid camera target" ); return( JS_TRUE ); @@ -716,7 +716,7 @@ JSBool buildTime( JSContext* cx, JSObject*, uint argc, jsval* argv, jsval* rval // Return distance between 2 points. // params: 2 position vectors [CVector3D] // returns: Euclidean distance [float] -JSBool v3dist( JSContext* cx, JSObject* obj, uint argc, jsval* argv, jsval* rval ) +JSBool v3dist( JSContext* cx, JSObject* UNUSED(obj), uint argc, jsval* argv, jsval* rval ) { REQUIRE_PARAMS(2, v3dist); @@ -831,7 +831,7 @@ JSFunctionSpec ScriptFunctionTable[] = // property accessors //----------------------------------------------------------------------------- -JSBool GetEntitySet( JSContext* cx, JSObject*, jsval argv, jsval* vp ) +JSBool GetEntitySet( JSContext* UNUSED(cx), JSObject* UNUSED(obj), jsval UNUSED(argv), jsval* vp ) { std::vector* extant = g_EntityManager.getExtant(); @@ -842,7 +842,7 @@ JSBool GetEntitySet( JSContext* cx, JSObject*, jsval argv, jsval* vp ) } -JSBool GetPlayerSet( JSContext* cx, JSObject*, jsval id, jsval* vp ) +JSBool GetPlayerSet( JSContext* UNUSED(cx), JSObject* UNUSED(obj), jsval UNUSED(id), jsval* vp ) { std::vector* players = g_Game->GetPlayers(); @@ -852,21 +852,21 @@ JSBool GetPlayerSet( JSContext* cx, JSObject*, jsval id, jsval* vp ) } -JSBool GetLocalPlayer( JSContext* cx, JSObject*, jsval id, jsval* vp ) +JSBool GetLocalPlayer( JSContext* UNUSED(cx), JSObject* UNUSED(obj), jsval UNUSED(id), jsval* vp ) { *vp = OBJECT_TO_JSVAL( g_Game->GetLocalPlayer()->GetScript() ); return( JS_TRUE ); } -JSBool GetGaiaPlayer( JSContext* cx, JSObject*, jsval id, jsval* vp ) +JSBool GetGaiaPlayer( JSContext* UNUSED(cx), JSObject* UNUSED(obj), jsval UNUSED(id), jsval* vp ) { *vp = OBJECT_TO_JSVAL( g_Game->GetPlayer( 0 )->GetScript() ); return( JS_TRUE ); } -JSBool SetLocalPlayer( JSContext* cx, JSObject* obj, jsval id, jsval* vp ) +JSBool SetLocalPlayer( JSContext* cx, JSObject* UNUSED(obj), jsval UNUSED(id), jsval* vp ) { CPlayer* newLocalPlayer = ToNative( *vp ); @@ -881,7 +881,7 @@ JSBool SetLocalPlayer( JSContext* cx, JSObject* obj, jsval id, jsval* vp ) } -JSBool GetGameView( JSContext* cx, JSObject*, jsval id, jsval* vp ) +JSBool GetGameView( JSContext* UNUSED(cx), JSObject* UNUSED(obj), jsval UNUSED(id), jsval* vp ) { if (g_Game) *vp = OBJECT_TO_JSVAL( g_Game->GetView()->GetScript() );