Unify GDScriptAnalyzer in-editor and runtime autoload checks
This commit is contained in:
parent
2a04b18d37
commit
fb418685a0
|
@ -1966,6 +1966,16 @@ void GDScriptLanguage::add_named_global_constant(const StringName &p_name, const
|
|||
named_globals[p_name] = p_value;
|
||||
}
|
||||
|
||||
Variant GDScriptLanguage::get_any_global_constant(const StringName &p_name) {
|
||||
if (named_globals.has(p_name)) {
|
||||
return named_globals[p_name];
|
||||
}
|
||||
if (globals.has(p_name)) {
|
||||
return _global_array[globals[p_name]];
|
||||
}
|
||||
ERR_FAIL_V_MSG(Variant(), vformat("Could not find any global constant with name: %s.", p_name));
|
||||
}
|
||||
|
||||
void GDScriptLanguage::remove_named_global_constant(const StringName &p_name) {
|
||||
ERR_FAIL_COND(!named_globals.has(p_name));
|
||||
named_globals.erase(p_name);
|
||||
|
|
|
@ -455,6 +455,9 @@ public:
|
|||
_FORCE_INLINE_ Variant *get_global_array() { return _global_array; }
|
||||
_FORCE_INLINE_ const HashMap<StringName, int> &get_global_map() const { return globals; }
|
||||
_FORCE_INLINE_ const HashMap<StringName, Variant> &get_named_globals_map() const { return named_globals; }
|
||||
// These two functions should be used when behavior needs to be consistent between in-editor and running the scene
|
||||
bool has_any_global_constant(const StringName &p_name) { return named_globals.has(p_name) || globals.has(p_name); }
|
||||
Variant get_any_global_constant(const StringName &p_name);
|
||||
|
||||
_FORCE_INLINE_ static GDScriptLanguage *get_singleton() { return singleton; }
|
||||
|
||||
|
|
|
@ -3403,8 +3403,8 @@ void GDScriptAnalyzer::reduce_identifier(GDScriptParser::IdentifierNode *p_ident
|
|||
}
|
||||
}
|
||||
} else if (ResourceLoader::get_resource_type(autoload.path) == "PackedScene") {
|
||||
if (GDScriptLanguage::get_singleton()->get_named_globals_map().has(name)) {
|
||||
Variant constant = GDScriptLanguage::get_singleton()->get_named_globals_map()[name];
|
||||
if (GDScriptLanguage::get_singleton()->has_any_global_constant(name)) {
|
||||
Variant constant = GDScriptLanguage::get_singleton()->get_any_global_constant(name);
|
||||
Node *node = Object::cast_to<Node>(constant);
|
||||
if (node != nullptr) {
|
||||
Ref<GDScript> scr = node->get_script();
|
||||
|
@ -3426,17 +3426,8 @@ void GDScriptAnalyzer::reduce_identifier(GDScriptParser::IdentifierNode *p_ident
|
|||
}
|
||||
}
|
||||
|
||||
if (GDScriptLanguage::get_singleton()->get_global_map().has(name)) {
|
||||
int idx = GDScriptLanguage::get_singleton()->get_global_map()[name];
|
||||
Variant constant = GDScriptLanguage::get_singleton()->get_global_array()[idx];
|
||||
p_identifier->set_datatype(type_from_variant(constant, p_identifier));
|
||||
p_identifier->is_constant = true;
|
||||
p_identifier->reduced_value = constant;
|
||||
return;
|
||||
}
|
||||
|
||||
if (GDScriptLanguage::get_singleton()->get_named_globals_map().has(name)) {
|
||||
Variant constant = GDScriptLanguage::get_singleton()->get_named_globals_map()[name];
|
||||
if (GDScriptLanguage::get_singleton()->has_any_global_constant(name)) {
|
||||
Variant constant = GDScriptLanguage::get_singleton()->get_any_global_constant(name);
|
||||
p_identifier->set_datatype(type_from_variant(constant, p_identifier));
|
||||
p_identifier->is_constant = true;
|
||||
p_identifier->reduced_value = constant;
|
||||
|
|
Loading…
Reference in New Issue