The Squirrel interpreter. See http://www.squirrel-lang.org/
Diff: squirrel/sqfuncstate.h
- Revision:
- 0:97a4f8cc534c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/squirrel/sqfuncstate.h Tue Dec 16 10:20:34 2014 +0000 @@ -0,0 +1,91 @@ +/* see copyright notice in squirrel.h */ +#ifndef _SQFUNCSTATE_H_ +#define _SQFUNCSTATE_H_ +/////////////////////////////////// +#include "squtils.h" + +struct SQFuncState +{ + SQFuncState(SQSharedState *ss,SQFuncState *parent,CompilerErrorFunc efunc,void *ed); + ~SQFuncState(); +#ifdef _DEBUG_DUMP + void Dump(SQFunctionProto *func); +#endif + void Error(const SQChar *err); + SQFuncState *PushChildState(SQSharedState *ss); + void PopChildState(); + void AddInstruction(SQOpcode _op,SQInteger arg0=0,SQInteger arg1=0,SQInteger arg2=0,SQInteger arg3=0){SQInstruction i(_op,arg0,arg1,arg2,arg3);AddInstruction(i);} + void AddInstruction(SQInstruction &i); + void SetIntructionParams(SQInteger pos,SQInteger arg0,SQInteger arg1,SQInteger arg2=0,SQInteger arg3=0); + void SetIntructionParam(SQInteger pos,SQInteger arg,SQInteger val); + SQInstruction &GetInstruction(SQInteger pos){return _instructions[pos];} + void PopInstructions(SQInteger size){for(SQInteger i=0;i<size;i++)_instructions.pop_back();} + void SetStackSize(SQInteger n); + SQInteger CountOuters(SQInteger stacksize); + void SnoozeOpt(){_optimization=false;} + void AddDefaultParam(SQInteger trg) { _defaultparams.push_back(trg); } + SQInteger GetDefaultParamCount() { return _defaultparams.size(); } + SQInteger GetCurrentPos(){return _instructions.size()-1;} + SQInteger GetNumericConstant(const SQInteger cons); + SQInteger GetNumericConstant(const SQFloat cons); + SQInteger PushLocalVariable(const SQObject &name); + void AddParameter(const SQObject &name); + //void AddOuterValue(const SQObject &name); + SQInteger GetLocalVariable(const SQObject &name); + void MarkLocalAsOuter(SQInteger pos); + SQInteger GetOuterVariable(const SQObject &name); + SQInteger GenerateCode(); + SQInteger GetStackSize(); + SQInteger CalcStackFrameSize(); + void AddLineInfos(SQInteger line,bool lineop,bool force=false); + SQFunctionProto *BuildProto(); + SQInteger AllocStackPos(); + SQInteger PushTarget(SQInteger n=-1); + SQInteger PopTarget(); + SQInteger TopTarget(); + SQInteger GetUpTarget(SQInteger n); + void DiscardTarget(); + bool IsLocal(SQUnsignedInteger stkpos); + SQObject CreateString(const SQChar *s,SQInteger len = -1); + SQObject CreateTable(); + bool IsConstant(const SQObject &name,SQObject &e); + SQInteger _returnexp; + SQLocalVarInfoVec _vlocals; + SQIntVec _targetstack; + SQInteger _stacksize; + bool _varparams; + bool _bgenerator; + SQIntVec _unresolvedbreaks; + SQIntVec _unresolvedcontinues; + SQObjectPtrVec _functions; + SQObjectPtrVec _parameters; + SQOuterVarVec _outervalues; + SQInstructionVec _instructions; + SQLocalVarInfoVec _localvarinfos; + SQObjectPtr _literals; + SQObjectPtr _strings; + SQObjectPtr _name; + SQObjectPtr _sourcename; + SQInteger _nliterals; + SQLineInfoVec _lineinfos; + SQFuncState *_parent; + SQIntVec _scope_blocks; + SQIntVec _breaktargets; + SQIntVec _continuetargets; + SQIntVec _defaultparams; + SQInteger _lastline; + SQInteger _traps; //contains number of nested exception traps + SQInteger _outers; + bool _optimization; + SQSharedState *_sharedstate; + sqvector<SQFuncState*> _childstates; + SQInteger GetConstant(const SQObject &cons); +private: + CompilerErrorFunc _errfunc; + void *_errtarget; + SQSharedState *_ss; +}; + + +#endif //_SQFUNCSTATE_H_ +