Support :: prefix to reference global namespace, deprecate GLOBAL::

Closes #2709
This commit is contained in:
Arne Welzel 2023-07-10 14:13:27 +02:00
parent c23ee30542
commit 12a5616f4d
26 changed files with 476 additions and 20 deletions

View file

@ -28,6 +28,7 @@ TEST_CASE("module_util streq")
TEST_CASE("module_util extract_module_name")
{
CHECK(extract_module_name("mod") == GLOBAL_MODULE_NAME);
CHECK(extract_module_name("::var") == GLOBAL_MODULE_NAME);
CHECK(extract_module_name("mod::") == "mod");
CHECK(extract_module_name("mod::var") == "mod");
}
@ -38,7 +39,7 @@ string extract_module_name(const char* name)
string module_name = name;
string::size_type pos = module_name.rfind("::");
if ( pos == string::npos )
if ( pos == string::npos || pos == 0 )
return GLOBAL_MODULE_NAME;
module_name.erase(pos);
@ -89,16 +90,18 @@ TEST_CASE("module_util make_full_var_name")
CHECK(make_full_var_name(nullptr, "GLOBAL::var") == "var");
CHECK(make_full_var_name(GLOBAL_MODULE_NAME, "var") == "var");
CHECK(make_full_var_name(nullptr, "notglobal::var") == "notglobal::var");
CHECK(make_full_var_name(nullptr, "::var") == "::var");
CHECK(make_full_var_name(nullptr, "::var") == "var");
CHECK(make_full_var_name("module", "var") == "module::var");
CHECK(make_full_var_name("module::", "var") == "module::var");
CHECK(make_full_var_name("", "var") == "::var");
CHECK(make_full_var_name("", "var") == "var");
CHECK(make_full_var_name("", "::var") == "var");
}
string make_full_var_name(const char* module_name, const char* var_name)
{
if ( ! module_name || streq(module_name, GLOBAL_MODULE_NAME) || strstr(var_name, "::") )
if ( ! module_name || streq(module_name, "") || streq(module_name, GLOBAL_MODULE_NAME) ||
strstr(var_name, "::") )
{
if ( streq(GLOBAL_MODULE_NAME, extract_module_name(var_name).c_str()) )
return extract_var_name(var_name);