1
0
Fork 0

Codechange: put SQRegFunctions into initializer_list and use ranged for loops

pull/14202/head
Rubidium 2025-05-03 21:44:32 +02:00 committed by rubidium42
parent f4fc8f6b38
commit 8f74c08ea6
5 changed files with 40 additions and 58 deletions

View File

@ -182,7 +182,7 @@ typedef SQInteger (*SQREADFUNC)(SQUserPointer,SQUserPointer,SQInteger);
typedef char32_t (*SQLEXREADFUNC)(SQUserPointer); typedef char32_t (*SQLEXREADFUNC)(SQUserPointer);
typedef struct tagSQRegFunction{ typedef struct tagSQRegFunction{
const SQChar *name; std::string_view name;
SQFUNCTION f; SQFUNCTION f;
SQInteger nparamscheck; SQInteger nparamscheck;
const SQChar *typemask; const SQChar *typemask;

View File

@ -67,7 +67,7 @@ SINGLE_ARG_FUNC(ceil, 1)
SINGLE_ARG_FUNC(exp, 100) SINGLE_ARG_FUNC(exp, 100)
#define _DECL_FUNC(name,nparams,tycheck) {#name,math_##name,nparams,tycheck} #define _DECL_FUNC(name,nparams,tycheck) {#name,math_##name,nparams,tycheck}
static SQRegFunction mathlib_funcs[] = { static const std::initializer_list<SQRegFunction> mathlib_funcs = {
_DECL_FUNC(sqrt,2,".n"), _DECL_FUNC(sqrt,2,".n"),
_DECL_FUNC(sin,2,".n"), _DECL_FUNC(sin,2,".n"),
_DECL_FUNC(cos,2,".n"), _DECL_FUNC(cos,2,".n"),
@ -88,7 +88,6 @@ static SQRegFunction mathlib_funcs[] = {
#endif /* EXPORT_DEFAULT_SQUIRREL_FUNCTIONS */ #endif /* EXPORT_DEFAULT_SQUIRREL_FUNCTIONS */
_DECL_FUNC(fabs,2,".n"), _DECL_FUNC(fabs,2,".n"),
_DECL_FUNC(abs,2,".n"), _DECL_FUNC(abs,2,".n"),
{nullptr,nullptr,0,nullptr},
}; };
#ifndef M_PI #ifndef M_PI
@ -97,14 +96,12 @@ static SQRegFunction mathlib_funcs[] = {
SQRESULT sqstd_register_mathlib(HSQUIRRELVM v) SQRESULT sqstd_register_mathlib(HSQUIRRELVM v)
{ {
SQInteger i=0; for(auto &func : mathlib_funcs) {
while(mathlib_funcs[i].name!=nullptr) { sq_pushstring(v,func.name);
sq_pushstring(v,mathlib_funcs[i].name); sq_newclosure(v,func.f,0);
sq_newclosure(v,mathlib_funcs[i].f,0); sq_setparamscheck(v,func.nparamscheck,func.typemask);
sq_setparamscheck(v,mathlib_funcs[i].nparamscheck,mathlib_funcs[i].typemask); sq_setnativeclosurename(v,-1,func.name);
sq_setnativeclosurename(v,-1,mathlib_funcs[i].name);
sq_createslot(v,-3); sq_createslot(v,-3);
i++;
} }
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS #ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
sq_pushstring(v,"RAND_MAX"); sq_pushstring(v,"RAND_MAX");

View File

@ -237,7 +237,7 @@ static SQInteger base_type(HSQUIRRELVM v)
return 1; return 1;
} }
static SQRegFunction base_funcs[]={ static const std::initializer_list<SQRegFunction> base_funcs={
//generic //generic
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS #ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
{"seterrorhandler",base_seterrorhandler,2, nullptr}, {"seterrorhandler",base_seterrorhandler,2, nullptr},
@ -264,20 +264,17 @@ static SQRegFunction base_funcs[]={
{"collectgarbage",base_collectgarbage,1, "t"}, {"collectgarbage",base_collectgarbage,1, "t"},
#endif #endif
#endif #endif
{nullptr,nullptr,0,nullptr}
}; };
void sq_base_register(HSQUIRRELVM v) void sq_base_register(HSQUIRRELVM v)
{ {
SQInteger i=0;
sq_pushroottable(v); sq_pushroottable(v);
while(base_funcs[i].name!=nullptr) { for(auto &func : base_funcs) {
sq_pushstring(v,base_funcs[i].name); sq_pushstring(v,func.name);
sq_newclosure(v,base_funcs[i].f,0); sq_newclosure(v,func.f,0);
sq_setnativeclosurename(v,-1,base_funcs[i].name); sq_setnativeclosurename(v,-1,func.name);
sq_setparamscheck(v,base_funcs[i].nparamscheck,base_funcs[i].typemask); sq_setparamscheck(v,func.nparamscheck,func.typemask);
sq_createslot(v,-3); sq_createslot(v,-3);
i++;
} }
sq_pushstring(v,"_version_"); sq_pushstring(v,"_version_");
sq_pushstring(v,SQUIRREL_VERSION); sq_pushstring(v,SQUIRREL_VERSION);
@ -410,7 +407,7 @@ static SQInteger table_rawget(HSQUIRRELVM v)
} }
SQRegFunction SQSharedState::_table_default_delegate_funcz[]={ /* static */ const std::initializer_list<SQRegFunction> SQSharedState::_table_default_delegate_funcz={
{"len",default_delegate_len,1, "t"}, {"len",default_delegate_len,1, "t"},
{"rawget",table_rawget,2, "t"}, {"rawget",table_rawget,2, "t"},
{"rawset",table_rawset,3, "t"}, {"rawset",table_rawset,3, "t"},
@ -419,7 +416,6 @@ SQRegFunction SQSharedState::_table_default_delegate_funcz[]={
{"weakref",obj_delegate_weakref,1, nullptr }, {"weakref",obj_delegate_weakref,1, nullptr },
{"tostring",default_delegate_tostring,1, "."}, {"tostring",default_delegate_tostring,1, "."},
{"clear",obj_clear,1, "."}, {"clear",obj_clear,1, "."},
{nullptr,nullptr,0,nullptr}
}; };
//ARRAY DEFAULT DELEGATE/////////////////////////////////////// //ARRAY DEFAULT DELEGATE///////////////////////////////////////
@ -612,7 +608,7 @@ static SQInteger array_slice(HSQUIRRELVM v)
} }
SQRegFunction SQSharedState::_array_default_delegate_funcz[]={ /* static */ const std::initializer_list<SQRegFunction> SQSharedState::_array_default_delegate_funcz={
{"len",default_delegate_len,1, "a"}, {"len",default_delegate_len,1, "a"},
{"append",array_append,2, "a"}, {"append",array_append,2, "a"},
{"extend",array_extend,2, "aa"}, {"extend",array_extend,2, "aa"},
@ -628,7 +624,6 @@ SQRegFunction SQSharedState::_array_default_delegate_funcz[]={
{"weakref",obj_delegate_weakref,1, nullptr }, {"weakref",obj_delegate_weakref,1, nullptr },
{"tostring",default_delegate_tostring,1, "."}, {"tostring",default_delegate_tostring,1, "."},
{"clear",obj_clear,1, "."}, {"clear",obj_clear,1, "."},
{nullptr,nullptr,0,nullptr}
}; };
//STRING DEFAULT DELEGATE////////////////////////// //STRING DEFAULT DELEGATE//////////////////////////
@ -679,7 +674,7 @@ static SQInteger string_find(HSQUIRRELVM v)
STRING_TOFUNCZ(tolower) STRING_TOFUNCZ(tolower)
STRING_TOFUNCZ(toupper) STRING_TOFUNCZ(toupper)
SQRegFunction SQSharedState::_string_default_delegate_funcz[]={ /* static */ const std::initializer_list<SQRegFunction> SQSharedState::_string_default_delegate_funcz={
{"len",default_delegate_len,1, "s"}, {"len",default_delegate_len,1, "s"},
{"tointeger",default_delegate_tointeger,1, "s"}, {"tointeger",default_delegate_tointeger,1, "s"},
{"tofloat",default_delegate_tofloat,1, "s"}, {"tofloat",default_delegate_tofloat,1, "s"},
@ -689,17 +684,15 @@ SQRegFunction SQSharedState::_string_default_delegate_funcz[]={
{"tolower",string_tolower,1, "s"}, {"tolower",string_tolower,1, "s"},
{"toupper",string_toupper,1, "s"}, {"toupper",string_toupper,1, "s"},
{"weakref",obj_delegate_weakref,1, nullptr }, {"weakref",obj_delegate_weakref,1, nullptr },
{nullptr,nullptr,0,nullptr}
}; };
//INTEGER DEFAULT DELEGATE////////////////////////// //INTEGER DEFAULT DELEGATE//////////////////////////
SQRegFunction SQSharedState::_number_default_delegate_funcz[]={ /* static */ const std::initializer_list<SQRegFunction> SQSharedState::_number_default_delegate_funcz={
{"tointeger",default_delegate_tointeger,1, "n|b"}, {"tointeger",default_delegate_tointeger,1, "n|b"},
{"tofloat",default_delegate_tofloat,1, "n|b"}, {"tofloat",default_delegate_tofloat,1, "n|b"},
{"tostring",default_delegate_tostring,1, "."}, {"tostring",default_delegate_tostring,1, "."},
{"tochar",number_delegate_tochar,1, "n|b"}, {"tochar",number_delegate_tochar,1, "n|b"},
{"weakref",obj_delegate_weakref,1, nullptr }, {"weakref",obj_delegate_weakref,1, nullptr },
{nullptr,nullptr,0,nullptr}
}; };
//CLOSURE DEFAULT DELEGATE////////////////////////// //CLOSURE DEFAULT DELEGATE//////////////////////////
@ -778,7 +771,7 @@ static SQInteger closure_getinfos(HSQUIRRELVM v) {
} }
SQRegFunction SQSharedState::_closure_default_delegate_funcz[]={ /* static */ const std::initializer_list<SQRegFunction> SQSharedState::_closure_default_delegate_funcz={
{"call",closure_call,-1, "c"}, {"call",closure_call,-1, "c"},
{"pcall",closure_pcall,-1, "c"}, {"pcall",closure_pcall,-1, "c"},
{"acall",closure_acall,2, "ca"}, {"acall",closure_acall,2, "ca"},
@ -787,7 +780,6 @@ SQRegFunction SQSharedState::_closure_default_delegate_funcz[]={
{"tostring",default_delegate_tostring,1, "."}, {"tostring",default_delegate_tostring,1, "."},
{"bindenv",closure_bindenv,2, "c x|y|t"}, {"bindenv",closure_bindenv,2, "c x|y|t"},
{"getinfos",closure_getinfos,1, "c"}, {"getinfos",closure_getinfos,1, "c"},
{nullptr,nullptr,0,nullptr}
}; };
//GENERATOR DEFAULT DELEGATE //GENERATOR DEFAULT DELEGATE
@ -802,11 +794,10 @@ static SQInteger generator_getstatus(HSQUIRRELVM v)
return 1; return 1;
} }
SQRegFunction SQSharedState::_generator_default_delegate_funcz[]={ /* static */ const std::initializer_list<SQRegFunction> SQSharedState::_generator_default_delegate_funcz={
{"getstatus",generator_getstatus,1, "g"}, {"getstatus",generator_getstatus,1, "g"},
{"weakref",obj_delegate_weakref,1, nullptr }, {"weakref",obj_delegate_weakref,1, nullptr },
{"tostring",default_delegate_tostring,1, "."}, {"tostring",default_delegate_tostring,1, "."},
{nullptr,nullptr,0,nullptr}
}; };
//THREAD DEFAULT DELEGATE //THREAD DEFAULT DELEGATE
@ -886,13 +877,12 @@ static SQInteger thread_getstatus(HSQUIRRELVM v)
return 1; return 1;
} }
SQRegFunction SQSharedState::_thread_default_delegate_funcz[] = { /* static */ const std::initializer_list<SQRegFunction> SQSharedState::_thread_default_delegate_funcz = {
{"call", thread_call, -1, "v"}, {"call", thread_call, -1, "v"},
{"wakeup", thread_wakeup, -1, "v"}, {"wakeup", thread_wakeup, -1, "v"},
{"getstatus", thread_getstatus, 1, "v"}, {"getstatus", thread_getstatus, 1, "v"},
{"weakref",obj_delegate_weakref,1, nullptr }, {"weakref",obj_delegate_weakref,1, nullptr },
{"tostring",default_delegate_tostring,1, "."}, {"tostring",default_delegate_tostring,1, "."},
{nullptr,nullptr,0,nullptr},
}; };
static SQInteger class_getattributes(HSQUIRRELVM v) static SQInteger class_getattributes(HSQUIRRELVM v)
@ -916,14 +906,13 @@ static SQInteger class_instance(HSQUIRRELVM v)
return SQ_ERROR; return SQ_ERROR;
} }
SQRegFunction SQSharedState::_class_default_delegate_funcz[] = { /* static */ const std::initializer_list<SQRegFunction> SQSharedState::_class_default_delegate_funcz = {
{"getattributes", class_getattributes, 2, "y."}, {"getattributes", class_getattributes, 2, "y."},
{"setattributes", class_setattributes, 3, "y.."}, {"setattributes", class_setattributes, 3, "y.."},
{"rawin",container_rawexists,2, "y"}, {"rawin",container_rawexists,2, "y"},
{"weakref",obj_delegate_weakref,1, nullptr }, {"weakref",obj_delegate_weakref,1, nullptr },
{"tostring",default_delegate_tostring,1, "."}, {"tostring",default_delegate_tostring,1, "."},
{"instance",class_instance,1, "y"}, {"instance",class_instance,1, "y"},
{nullptr,nullptr,0,nullptr}
}; };
static SQInteger instance_getclass(HSQUIRRELVM v) static SQInteger instance_getclass(HSQUIRRELVM v)
@ -933,12 +922,11 @@ static SQInteger instance_getclass(HSQUIRRELVM v)
return SQ_ERROR; return SQ_ERROR;
} }
SQRegFunction SQSharedState::_instance_default_delegate_funcz[] = { /* static */ const std::initializer_list<SQRegFunction> SQSharedState::_instance_default_delegate_funcz = {
{"getclass", instance_getclass, 1, "x"}, {"getclass", instance_getclass, 1, "x"},
{"rawin",container_rawexists,2, "x"}, {"rawin",container_rawexists,2, "x"},
{"weakref",obj_delegate_weakref,1, nullptr }, {"weakref",obj_delegate_weakref,1, nullptr },
{"tostring",default_delegate_tostring,1, "."}, {"tostring",default_delegate_tostring,1, "."},
{nullptr,nullptr,0,nullptr}
}; };
static SQInteger weakref_ref(HSQUIRRELVM v) static SQInteger weakref_ref(HSQUIRRELVM v)
@ -948,11 +936,10 @@ static SQInteger weakref_ref(HSQUIRRELVM v)
return 1; return 1;
} }
SQRegFunction SQSharedState::_weakref_default_delegate_funcz[] = { /* static */ const std::initializer_list<SQRegFunction> SQSharedState::_weakref_default_delegate_funcz = {
{"ref",weakref_ref,1, "r"}, {"ref",weakref_ref,1, "r"},
{"weakref",obj_delegate_weakref,1, nullptr }, {"weakref",obj_delegate_weakref,1, nullptr },
{"tostring",default_delegate_tostring,1, "."}, {"tostring",default_delegate_tostring,1, "."},
{nullptr,nullptr,0,nullptr}
}; };

View File

@ -75,18 +75,16 @@ bool CompileTypemask(SQIntVec &res,const SQChar *typemask)
return true; return true;
} }
SQTable *CreateDefaultDelegate(SQSharedState *ss,SQRegFunction *funcz) SQTable *CreateDefaultDelegate(SQSharedState *ss,const std::initializer_list<SQRegFunction> &funcz)
{ {
SQInteger i=0;
SQTable *t=SQTable::Create(ss,0); SQTable *t=SQTable::Create(ss,0);
while(funcz[i].name!=nullptr){ for (auto &func : funcz) {
SQNativeClosure *nc = SQNativeClosure::Create(ss,funcz[i].f); SQNativeClosure *nc = SQNativeClosure::Create(ss,func.f);
nc->_nparamscheck = funcz[i].nparamscheck; nc->_nparamscheck = func.nparamscheck;
nc->_name = SQString::Create(ss,funcz[i].name); nc->_name = SQString::Create(ss,func.name);
if(funcz[i].typemask && !CompileTypemask(nc->_typecheck,funcz[i].typemask)) if(func.typemask && !CompileTypemask(nc->_typecheck,func.typemask))
return nullptr; return nullptr;
t->NewSlot(SQString::Create(ss,funcz[i].name),nc); t->NewSlot(SQString::Create(ss,func.name),nc);
i++;
} }
return t; return t;
} }

View File

@ -81,25 +81,25 @@ public:
#endif #endif
SQObjectPtr _root_vm; SQObjectPtr _root_vm;
SQObjectPtr _table_default_delegate; SQObjectPtr _table_default_delegate;
static SQRegFunction _table_default_delegate_funcz[]; static const std::initializer_list<SQRegFunction> _table_default_delegate_funcz;
SQObjectPtr _array_default_delegate; SQObjectPtr _array_default_delegate;
static SQRegFunction _array_default_delegate_funcz[]; static const std::initializer_list<SQRegFunction> _array_default_delegate_funcz;
SQObjectPtr _string_default_delegate; SQObjectPtr _string_default_delegate;
static SQRegFunction _string_default_delegate_funcz[]; static const std::initializer_list<SQRegFunction> _string_default_delegate_funcz;
SQObjectPtr _number_default_delegate; SQObjectPtr _number_default_delegate;
static SQRegFunction _number_default_delegate_funcz[]; static const std::initializer_list<SQRegFunction> _number_default_delegate_funcz;
SQObjectPtr _generator_default_delegate; SQObjectPtr _generator_default_delegate;
static SQRegFunction _generator_default_delegate_funcz[]; static const std::initializer_list<SQRegFunction> _generator_default_delegate_funcz;
SQObjectPtr _closure_default_delegate; SQObjectPtr _closure_default_delegate;
static SQRegFunction _closure_default_delegate_funcz[]; static const std::initializer_list<SQRegFunction> _closure_default_delegate_funcz;
SQObjectPtr _thread_default_delegate; SQObjectPtr _thread_default_delegate;
static SQRegFunction _thread_default_delegate_funcz[]; static const std::initializer_list<SQRegFunction> _thread_default_delegate_funcz;
SQObjectPtr _class_default_delegate; SQObjectPtr _class_default_delegate;
static SQRegFunction _class_default_delegate_funcz[]; static const std::initializer_list<SQRegFunction> _class_default_delegate_funcz;
SQObjectPtr _instance_default_delegate; SQObjectPtr _instance_default_delegate;
static SQRegFunction _instance_default_delegate_funcz[]; static const std::initializer_list<SQRegFunction> _instance_default_delegate_funcz;
SQObjectPtr _weakref_default_delegate; SQObjectPtr _weakref_default_delegate;
static SQRegFunction _weakref_default_delegate_funcz[]; static const std::initializer_list<SQRegFunction> _weakref_default_delegate_funcz;
SQCOMPILERERROR _compilererrorhandler; SQCOMPILERERROR _compilererrorhandler;
SQPRINTFUNCTION _printfunc; SQPRINTFUNCTION _printfunc;