};
struct CallInfo{
- CallInfo() { _generator._type = OT_NULL;}
+ //CallInfo() { _generator._type = OT_NULL;}
SQInstruction *_ip;
SQObjectPtr *_literals;
- SQObject _closure;
- SQObject _generator;
+ SQObjectPtr _closure;
+ SQGenerator *_generator;
SQInt32 _etraps;
SQInt32 _prevstkbase;
SQInt32 _prevtop;
void Finalize();
void GrowCallStack() {
SQInteger newsize = _alloccallsstacksize*2;
- _callsstack = (CallInfo*)sq_realloc(_callsstack,_alloccallsstacksize*sizeof(CallInfo),newsize*sizeof(CallInfo));
+ _callstackdata.resize(newsize);
+ _callsstack = &_callstackdata[0];
_alloccallsstacksize = newsize;
}
void Release(){ sq_delete(this,SQVM); } //does nothing
CallInfo* _callsstack;
SQInteger _callsstacksize;
SQInteger _alloccallsstacksize;
+ sqvector<CallInfo> _callstackdata;
ExceptionsTraps _etraps;
CallInfo *ci;
};
inline SQObjectPtr &stack_get(HSQUIRRELVM v,SQInteger idx){return ((idx>=0)?(v->GetAt(idx+v->_stackbase-1)):(v->GetUp(idx)));}
-const SQChar *GetTypeName(const SQObjectPtr &obj1);
-const SQChar *IdType2Name(SQObjectType type);
#define _ss(_vm_) (_vm_)->_sharedstate
#define POP_CALLINFO(v){ \
v->_callsstacksize--; \
+ v->ci->_closure.Null(); \
if(v->_callsstacksize) \
v->ci = &v->_callsstack[v->_callsstacksize-1] ; \
else \