mirror of
https://github.com/godotengine/godot.git
synced 2025-10-20 00:13:30 +00:00
Global class names (and GDScript support for it)
This commit is contained in:
parent
f6ce73f724
commit
a3f1ee5c57
13 changed files with 381 additions and 10 deletions
|
@ -3111,6 +3111,28 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
|
|||
return;
|
||||
}
|
||||
|
||||
} break;
|
||||
case GDScriptTokenizer::TK_PR_CLASS_NAME: {
|
||||
|
||||
if (p_class->owner) {
|
||||
_set_error("'class_name' is only valid for the main class namespace.");
|
||||
return;
|
||||
}
|
||||
if (tokenizer->get_token(1) != GDScriptTokenizer::TK_IDENTIFIER) {
|
||||
|
||||
_set_error("'class_name' syntax: 'class_name <UniqueName>'");
|
||||
return;
|
||||
}
|
||||
|
||||
p_class->name = tokenizer->get_token_identifier(1);
|
||||
|
||||
if (self_path != String() && ScriptServer::is_global_class(p_class->name) && ScriptServer::get_global_class_path(p_class->name) != self_path) {
|
||||
_set_error("Unique global class '" + p_class->name + "' already exists at path: " + ScriptServer::get_global_class_path(p_class->name));
|
||||
return;
|
||||
}
|
||||
|
||||
tokenizer->advance(2);
|
||||
|
||||
} break;
|
||||
case GDScriptTokenizer::TK_PR_TOOL: {
|
||||
|
||||
|
@ -3138,6 +3160,11 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
|
|||
name = tokenizer->get_token_identifier(1);
|
||||
tokenizer->advance(2);
|
||||
|
||||
if (ScriptServer::is_global_class(name)) {
|
||||
_set_error("Can't override name of unique global class '" + name + "' already exists at path: " + ScriptServer::get_global_class_path(p_class->name));
|
||||
return;
|
||||
}
|
||||
|
||||
ClassNode *newclass = alloc_node<ClassNode>();
|
||||
newclass->initializer = alloc_node<BlockNode>();
|
||||
newclass->initializer->parent_class = newclass;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue