diff options
| author | Pedro J. Estébanez | 2016-06-25 15:59:39 +0200 |
|---|---|---|
| committer | Rémi Verschelde | 2016-07-08 18:18:00 +0200 |
| commit | 5083e18b8949e9ceee475bb8198ffbbf20a6ba5a (patch) | |
| tree | e2265d61962b2d4740484db8a79fd30ba40d51d9 /modules/gdscript/gd_compiler.cpp | |
| parent | 3ff466770a74ecc2c08dd4b30ac531ecf58a0db1 (diff) | |
| download | godot-5083e18b8949e9ceee475bb8198ffbbf20a6ba5a.tar.gz godot-5083e18b8949e9ceee475bb8198ffbbf20a6ba5a.tar.zst godot-5083e18b8949e9ceee475bb8198ffbbf20a6ba5a.zip | |
Diffstat (limited to 'modules/gdscript/gd_compiler.cpp')
| -rw-r--r-- | modules/gdscript/gd_compiler.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/modules/gdscript/gd_compiler.cpp b/modules/gdscript/gd_compiler.cpp index d26773ff0..d8c058722 100644 --- a/modules/gdscript/gd_compiler.cpp +++ b/modules/gdscript/gd_compiler.cpp @@ -550,17 +550,25 @@ int GDCompiler::_parse_expression(CodeGen& codegen,const GDParser::Node *p_expre int index; if (named) { -#ifdef DEBUG_ENABLED if (on->arguments[0]->type==GDParser::Node::TYPE_SELF && codegen.script && codegen.function_node && !codegen.function_node->_static) { - const Map<StringName,GDScript::MemberInfo>::Element *MI = codegen.script->member_indices.find(static_cast<GDParser::IdentifierNode*>(on->arguments[1])->name); + GDParser::IdentifierNode* identifier = static_cast<GDParser::IdentifierNode*>(on->arguments[1]); + const Map<StringName,GDScript::MemberInfo>::Element *MI = codegen.script->member_indices.find(identifier->name); + +#ifdef DEBUG_ENABLED if (MI && MI->get().getter==codegen.function_node->name) { String n = static_cast<GDParser::IdentifierNode*>(on->arguments[1])->name; _set_error("Must use '"+n+"' instead of 'self."+n+"' in getter.",on); return -1; } - } #endif + + if (MI && MI->get().getter=="") { + // Faster than indexing self (as if no self. had been used) + return (MI->get().index)|(GDFunction::ADDR_TYPE_MEMBER<<GDFunction::ADDR_BITS); + } + } + index=codegen.get_name_map_pos(static_cast<GDParser::IdentifierNode*>(on->arguments[1])->name); } else { |
