diff options
| author | Rémi Verschelde <rverschelde@gmail.com> | 2020-05-13 14:38:43 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-13 14:38:43 +0200 |
| commit | cbd519f1f4ffcf0aeeed2c6cf2b761defd9ffb87 (patch) | |
| tree | 90b326e1f6bf13cca2c82461ceefd51f8b5c4a41 /modules/gdscript/gdscript_parser.cpp | |
| parent | 1c18be1cc9ee95f80435c761ea8c1574503ac5c3 (diff) | |
| parent | e7f056dfac382facbaeda903bf8639c32e87bf18 (diff) | |
| download | redot-engine-cbd519f1f4ffcf0aeeed2c6cf2b761defd9ffb87.tar.gz | |
Merge pull request #38707 from ThakeeNathees/static-const-access-bug-fix
regression: static func can't access const fix
Diffstat (limited to 'modules/gdscript/gdscript_parser.cpp')
| -rw-r--r-- | modules/gdscript/gdscript_parser.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index b03d041aaf..d4d70f79bb 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -7507,7 +7507,7 @@ GDScriptParser::DataType GDScriptParser::_reduce_function_call_type(const Operat return return_type; } -bool GDScriptParser::_get_member_type(const DataType &p_base_type, const StringName &p_member, DataType &r_member_type) const { +bool GDScriptParser::_get_member_type(const DataType &p_base_type, const StringName &p_member, DataType &r_member_type, bool *r_is_const) const { DataType base_type = p_base_type; // Check classes in current file @@ -7518,6 +7518,8 @@ bool GDScriptParser::_get_member_type(const DataType &p_base_type, const StringN while (base) { if (base->constant_expressions.has(p_member)) { + if (r_is_const) + *r_is_const = true; r_member_type = base->constant_expressions[p_member].expression->get_datatype(); return true; } @@ -7742,8 +7744,9 @@ GDScriptParser::DataType GDScriptParser::_reduce_identifier_type(const DataType base_type = DataType(*p_base_type); } - if (_get_member_type(base_type, p_identifier, member_type)) { - if (!p_base_type && current_function && current_function->_static) { + bool is_const = false; + if (_get_member_type(base_type, p_identifier, member_type, &is_const)) { + if (!p_base_type && current_function && current_function->_static && !is_const) { _set_error("Can't access member variable (\"" + p_identifier.operator String() + "\") from a static function.", p_line); return DataType(); } |
