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 struct tagSQRegFunction{
const SQChar *name;
std::string_view name;
SQFUNCTION f;
SQInteger nparamscheck;
const SQChar *typemask;

View File

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

View File

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

View File

@ -75,18 +75,16 @@ bool CompileTypemask(SQIntVec &res,const SQChar *typemask)
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);
while(funcz[i].name!=nullptr){
SQNativeClosure *nc = SQNativeClosure::Create(ss,funcz[i].f);
nc->_nparamscheck = funcz[i].nparamscheck;
nc->_name = SQString::Create(ss,funcz[i].name);
if(funcz[i].typemask && !CompileTypemask(nc->_typecheck,funcz[i].typemask))
for (auto &func : funcz) {
SQNativeClosure *nc = SQNativeClosure::Create(ss,func.f);
nc->_nparamscheck = func.nparamscheck;
nc->_name = SQString::Create(ss,func.name);
if(func.typemask && !CompileTypemask(nc->_typecheck,func.typemask))
return nullptr;
t->NewSlot(SQString::Create(ss,funcz[i].name),nc);
i++;
t->NewSlot(SQString::Create(ss,func.name),nc);
}
return t;
}

View File

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