1 /* see copyright notice in squirrel.h */
\r
2 #ifndef _SQFUNCSTATE_H_
\r
3 #define _SQFUNCSTATE_H_
\r
4 ///////////////////////////////////
\r
9 SQFuncState(SQSharedState *ss,SQFuncState *parent,CompilerErrorFunc efunc,void *ed);
\r
12 void Dump(SQFunctionProto *func);
\r
14 void Error(const SQChar *err);
\r
15 SQFuncState *PushChildState(SQSharedState *ss);
\r
16 void PopChildState();
\r
17 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);}
\r
18 void AddInstruction(SQInstruction &i);
\r
19 void SetIntructionParams(SQInteger pos,SQInteger arg0,SQInteger arg1,SQInteger arg2=0,SQInteger arg3=0);
\r
20 void SetIntructionParam(SQInteger pos,SQInteger arg,SQInteger val);
\r
21 SQInstruction &GetInstruction(SQInteger pos){return _instructions[pos];}
\r
22 void PopInstructions(SQInteger size){for(SQInteger i=0;i<size;i++)_instructions.pop_back();}
\r
23 void SetStackSize(SQInteger n);
\r
24 void SnoozeOpt(){_optimization=false;}
\r
25 SQInteger GetCurrentPos(){return _instructions.size()-1;}
\r
26 //SQInteger GetStringConstant(const SQChar *cons);
\r
27 SQInteger GetNumericConstant(const SQInteger cons);
\r
28 SQInteger GetNumericConstant(const SQFloat cons);
\r
29 SQInteger PushLocalVariable(const SQObject &name);
\r
30 void AddParameter(const SQObject &name);
\r
31 void AddOuterValue(const SQObject &name);
\r
32 SQInteger GetLocalVariable(const SQObject &name);
\r
33 SQInteger GetOuterVariable(const SQObject &name);
\r
34 SQInteger GenerateCode();
\r
35 SQInteger GetStackSize();
\r
36 SQInteger CalcStackFrameSize();
\r
37 void AddLineInfos(SQInteger line,bool lineop,bool force=false);
\r
38 SQFunctionProto *BuildProto();
\r
39 SQInteger AllocStackPos();
\r
40 SQInteger PushTarget(SQInteger n=-1);
\r
41 SQInteger PopTarget();
\r
42 SQInteger TopTarget();
\r
43 SQInteger GetUpTarget(SQInteger n);
\r
44 bool IsLocal(SQUnsignedInteger stkpos);
\r
45 SQObject CreateString(const SQChar *s,SQInteger len = -1);
\r
46 SQInteger _returnexp;
\r
47 SQLocalVarInfoVec _vlocals;
\r
48 SQIntVec _targetstack;
\r
49 SQInteger _stacksize;
\r
52 SQIntVec _unresolvedbreaks;
\r
53 SQIntVec _unresolvedcontinues;
\r
54 SQObjectPtrVec _functions;
\r
55 SQObjectPtrVec _parameters;
\r
56 SQOuterVarVec _outervalues;
\r
57 SQInstructionVec _instructions;
\r
58 SQLocalVarInfoVec _localvarinfos;
\r
59 SQObjectPtr _literals;
\r
60 SQObjectPtr _strings;
\r
62 SQObjectPtr _sourcename;
\r
63 SQInteger _nliterals;
\r
64 SQLineInfoVec _lineinfos;
\r
65 SQFuncState *_parent;
\r
66 SQIntVec _breaktargets; //contains number of nested exception traps
\r
67 SQIntVec _continuetargets;
\r
68 SQInteger _lastline;
\r
71 SQSharedState *_sharedstate;
\r
72 sqvector<SQFuncState*> _childstates;
\r
73 SQInteger GetConstant(const SQObject &cons);
\r
75 CompilerErrorFunc _errfunc;
\r
80 #endif //_SQFUNCSTATE_H_
\r