Check for subclasses when checking for name clashes
Fixes #27460
(cherry picked from commit ece09f9872
)
This commit is contained in:
parent
40c2a5ff57
commit
667dc0b336
1 changed files with 33 additions and 0 deletions
|
@ -3679,6 +3679,11 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
|
||||||
_add_warning(GDScriptWarning::FUNCTION_CONFLICTS_VARIABLE, -1, name);
|
_add_warning(GDScriptWarning::FUNCTION_CONFLICTS_VARIABLE, -1, name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (int i = 0; i < p_class->subclasses.size(); i++) {
|
||||||
|
if (p_class->subclasses[i]->name == name) {
|
||||||
|
_add_warning(GDScriptWarning::FUNCTION_CONFLICTS_CONSTANT, -1, name);
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif // DEBUG_ENABLED
|
#endif // DEBUG_ENABLED
|
||||||
|
|
||||||
if (tokenizer->get_token() != GDScriptTokenizer::TK_PARENTHESIS_OPEN) {
|
if (tokenizer->get_token() != GDScriptTokenizer::TK_PARENTHESIS_OPEN) {
|
||||||
|
@ -4621,6 +4626,13 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < current_class->subclasses.size(); i++) {
|
||||||
|
if (current_class->subclasses[i]->name == member.identifier) {
|
||||||
|
_set_error("A class named '" + String(member.identifier) + "' already exists in this class (at line " + itos(current_class->subclasses[i]->line) + ").");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
#ifdef DEBUG_ENABLED
|
#ifdef DEBUG_ENABLED
|
||||||
for (int i = 0; i < current_class->functions.size(); i++) {
|
for (int i = 0; i < current_class->functions.size(); i++) {
|
||||||
if (current_class->functions[i]->name == member.identifier) {
|
if (current_class->functions[i]->name == member.identifier) {
|
||||||
|
@ -4865,6 +4877,13 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < current_class->subclasses.size(); i++) {
|
||||||
|
if (current_class->subclasses[i]->name == const_id) {
|
||||||
|
_set_error("A class named '" + String(const_id) + "' already exists in this class (at line " + itos(current_class->subclasses[i]->line) + ").");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
tokenizer->advance();
|
tokenizer->advance();
|
||||||
|
|
||||||
if (tokenizer->get_token() == GDScriptTokenizer::TK_COLON) {
|
if (tokenizer->get_token() == GDScriptTokenizer::TK_COLON) {
|
||||||
|
@ -4935,6 +4954,13 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < current_class->subclasses.size(); i++) {
|
||||||
|
if (current_class->subclasses[i]->name == enum_name) {
|
||||||
|
_set_error("A class named '" + String(enum_name) + "' already exists in this class (at line " + itos(current_class->subclasses[i]->line) + ").");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
tokenizer->advance();
|
tokenizer->advance();
|
||||||
}
|
}
|
||||||
if (tokenizer->get_token() != GDScriptTokenizer::TK_CURLY_BRACKET_OPEN) {
|
if (tokenizer->get_token() != GDScriptTokenizer::TK_CURLY_BRACKET_OPEN) {
|
||||||
|
@ -5020,6 +5046,13 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < current_class->subclasses.size(); i++) {
|
||||||
|
if (current_class->subclasses[i]->name == const_id) {
|
||||||
|
_set_error("A class named '" + String(const_id) + "' already exists in this class (at line " + itos(current_class->subclasses[i]->line) + ").");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ClassNode::Constant constant;
|
ClassNode::Constant constant;
|
||||||
constant.type.has_type = true;
|
constant.type.has_type = true;
|
||||||
constant.type.kind = DataType::BUILTIN;
|
constant.type.kind = DataType::BUILTIN;
|
||||||
|
|
Loading…
Reference in a new issue