From 6572d5128856b2ec55a2c417c92e584899f4906f Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Thu, 1 May 2014 11:34:10 -0300 Subject: -Fixes to OpenSSL compilation (more) -Fix bug in GDScript, now static functions can call static functions. --- modules/gdscript/gd_compiler.cpp | 7 ++++++- modules/gdscript/gd_script.cpp | 5 +++++ modules/gdscript/gd_script.h | 20 +++++++++++--------- 3 files changed, 22 insertions(+), 10 deletions(-) (limited to 'modules/gdscript') diff --git a/modules/gdscript/gd_compiler.cpp b/modules/gdscript/gd_compiler.cpp index dd2834bf34..90c83c201b 100644 --- a/modules/gdscript/gd_compiler.cpp +++ b/modules/gdscript/gd_compiler.cpp @@ -452,6 +452,7 @@ int GDCompiler::_parse_expression(CodeGen& codegen,const GDParser::Node *p_expre const GDParser::Node *instance = on->arguments[0]; + bool in_static=false; if (instance->type==GDParser::Node::TYPE_SELF) { //room for optimization @@ -465,7 +466,10 @@ int GDCompiler::_parse_expression(CodeGen& codegen,const GDParser::Node *p_expre int ret; - if (i==1) { + if (i==0 && on->arguments[i]->type==GDParser::Node::TYPE_SELF && codegen.function_node && codegen.function_node->_static) { + //static call to self + ret=(GDFunction::ADDR_TYPE_CLASS<arguments[i]->type!=GDParser::Node::TYPE_IDENTIFIER) { _set_error("Attempt to call a non-identifier.",on); @@ -475,6 +479,7 @@ int GDCompiler::_parse_expression(CodeGen& codegen,const GDParser::Node *p_expre ret=codegen.get_name_map_pos(id->name); } else { + ret = _parse_expression(codegen,on->arguments[i],slevel); if (ret<0) return ret; diff --git a/modules/gdscript/gd_script.cpp b/modules/gdscript/gd_script.cpp index 75bb47ceab..299a7d3e54 100644 --- a/modules/gdscript/gd_script.cpp +++ b/modules/gdscript/gd_script.cpp @@ -61,6 +61,10 @@ Variant *GDFunction::_get_variant(int p_address,GDInstance *p_instance,GDScript } return &self; } break; + case ADDR_TYPE_CLASS: { + + return &p_script->_static_ref; + } break; case ADDR_TYPE_MEMBER: { //member indexing is O(1) if (!p_instance) { @@ -1678,6 +1682,7 @@ Ref GDScript::get_base() const { GDScript::GDScript() { + _static_ref=this; valid=false; subclass_count=0; initializer=NULL; diff --git a/modules/gdscript/gd_script.h b/modules/gdscript/gd_script.h index 55bc547e8d..983899240a 100644 --- a/modules/gdscript/gd_script.h +++ b/modules/gdscript/gd_script.h @@ -75,13 +75,14 @@ public: ADDR_MASK=((1< > *r_stackvars) const; + void debug_get_stack_member_state(int p_line,List > *r_stackvars) const; _FORCE_INLINE_ bool is_empty() const { return _code_size==0; } @@ -183,6 +184,7 @@ friend class GDInstance; friend class GDFunction; friend class GDCompiler; friend class GDFunctions; + Variant _static_ref; //used for static call Ref native; Ref base; GDScript *_base; //fast pointer access -- cgit v1.2.3