diff options
Diffstat (limited to 'modules/gdscript/gd_script.h')
-rw-r--r-- | modules/gdscript/gd_script.h | 68 |
1 files changed, 56 insertions, 12 deletions
diff --git a/modules/gdscript/gd_script.h b/modules/gdscript/gd_script.h index 55bc547e8d..62787cf6f8 100644 --- a/modules/gdscript/gd_script.h +++ b/modules/gdscript/gd_script.h @@ -37,6 +37,8 @@ class GDInstance; class GDScript; + + class GDFunction { public: @@ -58,6 +60,9 @@ public: OPCODE_CALL_BUILT_IN, OPCODE_CALL_SELF, OPCODE_CALL_SELF_BASE, + OPCODE_YIELD, + OPCODE_YIELD_SIGNAL, + OPCODE_YIELD_RESUME, OPCODE_JUMP, OPCODE_JUMP_IF, OPCODE_JUMP_IF_NOT, @@ -75,13 +80,14 @@ public: ADDR_MASK=((1<<ADDR_BITS)-1), ADDR_TYPE_MASK=~ADDR_MASK, ADDR_TYPE_SELF=0, - ADDR_TYPE_MEMBER=1, - ADDR_TYPE_CLASS_CONSTANT=2, - ADDR_TYPE_LOCAL_CONSTANT=3, - ADDR_TYPE_STACK=4, - ADDR_TYPE_STACK_VARIABLE=5, - ADDR_TYPE_GLOBAL=6, - ADDR_TYPE_NIL=7 + ADDR_TYPE_CLASS=1, + ADDR_TYPE_MEMBER=2, + ADDR_TYPE_CLASS_CONSTANT=3, + ADDR_TYPE_LOCAL_CONSTANT=4, + ADDR_TYPE_STACK=5, + ADDR_TYPE_STACK_VARIABLE=6, + ADDR_TYPE_GLOBAL=7, + ADDR_TYPE_NIL=8 }; struct StackDebug { @@ -117,10 +123,13 @@ friend class GDCompiler; Vector<Variant> constants; Vector<StringName> global_names; Vector<int> default_arguments; - Vector<int> code; +#ifdef DEBUG_ENABLED + CharString func_cname; + const char*_func_cname; +#endif - List<StackDebug> stack_debug; + List<StackDebug> stack_debug; _FORCE_INLINE_ Variant *_get_variant(int p_address,GDInstance *p_instance,GDScript *p_script,Variant &self,Variant *p_stack,String& r_error) const; _FORCE_INLINE_ String _get_call_error(const Variant::CallError& p_err, const String& p_where,const Variant**argptrs) const; @@ -128,6 +137,20 @@ friend class GDCompiler; public: + struct CallState { + + GDInstance *instance; + Vector<uint8_t> stack; + int stack_size; + Variant self; + uint32_t alloca_size; + GDScript *_class; + int ip; + int line; + int defarg; + Variant result; + + }; _FORCE_INLINE_ bool is_static() const { return _static; } @@ -139,19 +162,37 @@ public: int get_max_stack_size() const; int get_default_argument_count() const; int get_default_argument_addr(int p_idx) const; - GDScript *get_script() const { return _script; } + GDScript *get_script() const { return _script; } - void debug_get_stack_member_state(int p_line,List<Pair<StringName,int> > *r_stackvars) const; + void debug_get_stack_member_state(int p_line,List<Pair<StringName,int> > *r_stackvars) const; _FORCE_INLINE_ bool is_empty() const { return _code_size==0; } int get_argument_count() const { return _argument_count; } - Variant call(GDInstance *p_instance,const Variant **p_args, int p_argcount,Variant::CallError& r_err); + Variant call(GDInstance *p_instance,const Variant **p_args, int p_argcount,Variant::CallError& r_err,CallState *p_state=NULL); GDFunction(); }; +class GDFunctionState : public Reference { + + OBJ_TYPE(GDFunctionState,Reference); +friend class GDFunction; + GDFunction *function; + GDFunction::CallState state; + Variant _signal_callback(const Variant** p_args, int p_argcount, Variant::CallError& r_error); +protected: + static void _bind_methods(); +public: + + bool is_valid() const; + Variant resume(const Variant& p_arg=Variant()); + GDFunctionState(); + ~GDFunctionState(); +}; + + class GDNativeClass : public Reference { OBJ_TYPE(GDNativeClass,Reference); @@ -179,10 +220,12 @@ class GDScript : public Script { bool valid; + friend class GDInstance; friend class GDFunction; friend class GDCompiler; friend class GDFunctions; + Variant _static_ref; //used for static call Ref<GDNativeClass> native; Ref<GDScript> base; GDScript *_base; //fast pointer access @@ -425,6 +468,7 @@ public: virtual int find_function(const String& p_function,const String& p_code) const; virtual String make_function(const String& p_class,const String& p_name,const StringArray& p_args) const; virtual Error complete_keyword(const String& p_code, int p_line, const String& p_base_path,const String& p_keyword, List<String>* r_options); + virtual void auto_indent_code(String& p_code,int p_from_line,int p_to_line) const; /* DEBUGGER FUNCTIONS */ |