Update to Squirrel 3.0.6
[supertux.git] / external / squirrel / squirrel / sqfuncstate.h
1 /*      see copyright notice in squirrel.h */\r
2 #ifndef _SQFUNCSTATE_H_\r
3 #define _SQFUNCSTATE_H_\r
4 ///////////////////////////////////\r
5 #include "squtils.h"\r
6 \r
7 struct SQFuncState\r
8 {\r
9         SQFuncState(SQSharedState *ss,SQFuncState *parent,CompilerErrorFunc efunc,void *ed);\r
10         ~SQFuncState();\r
11 #ifdef _DEBUG_DUMP\r
12         void Dump(SQFunctionProto *func);\r
13 #endif\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         SQInteger CountOuters(SQInteger stacksize);\r
25         void SnoozeOpt(){_optimization=false;}\r
26         void AddDefaultParam(SQInteger trg) { _defaultparams.push_back(trg); }\r
27         SQInteger GetDefaultParamCount() { return _defaultparams.size(); }\r
28         SQInteger GetCurrentPos(){return _instructions.size()-1;}\r
29         SQInteger GetNumericConstant(const SQInteger cons);\r
30         SQInteger GetNumericConstant(const SQFloat cons);\r
31         SQInteger PushLocalVariable(const SQObject &name);\r
32         void AddParameter(const SQObject &name);\r
33         //void AddOuterValue(const SQObject &name);\r
34         SQInteger GetLocalVariable(const SQObject &name);\r
35         void MarkLocalAsOuter(SQInteger pos);\r
36         SQInteger GetOuterVariable(const SQObject &name);\r
37         SQInteger GenerateCode();\r
38         SQInteger GetStackSize();\r
39         SQInteger CalcStackFrameSize();\r
40         void AddLineInfos(SQInteger line,bool lineop,bool force=false);\r
41         SQFunctionProto *BuildProto();\r
42         SQInteger AllocStackPos();\r
43         SQInteger PushTarget(SQInteger n=-1);\r
44         SQInteger PopTarget();\r
45         SQInteger TopTarget();\r
46         SQInteger GetUpTarget(SQInteger n);\r
47         void DiscardTarget();\r
48         bool IsLocal(SQUnsignedInteger stkpos);\r
49         SQObject CreateString(const SQChar *s,SQInteger len = -1);\r
50         SQObject CreateTable();\r
51         bool IsConstant(const SQObject &name,SQObject &e);\r
52         SQInteger _returnexp;\r
53         SQLocalVarInfoVec _vlocals;\r
54         SQIntVec _targetstack;\r
55         SQInteger _stacksize;\r
56         bool _varparams;\r
57         bool _bgenerator;\r
58         SQIntVec _unresolvedbreaks;\r
59         SQIntVec _unresolvedcontinues;\r
60         SQObjectPtrVec _functions;\r
61         SQObjectPtrVec _parameters;\r
62         SQOuterVarVec _outervalues;\r
63         SQInstructionVec _instructions;\r
64         SQLocalVarInfoVec _localvarinfos;\r
65         SQObjectPtr _literals;\r
66         SQObjectPtr _strings;\r
67         SQObjectPtr _name;\r
68         SQObjectPtr _sourcename;\r
69         SQInteger _nliterals;\r
70         SQLineInfoVec _lineinfos;\r
71         SQFuncState *_parent;\r
72         SQIntVec _scope_blocks;\r
73         SQIntVec _breaktargets;\r
74         SQIntVec _continuetargets;\r
75         SQIntVec _defaultparams;\r
76         SQInteger _lastline;\r
77         SQInteger _traps; //contains number of nested exception traps\r
78         SQInteger _outers;\r
79         bool _optimization;\r
80         SQSharedState *_sharedstate;\r
81         sqvector<SQFuncState*> _childstates;\r
82         SQInteger GetConstant(const SQObject &cons);\r
83 private:\r
84         CompilerErrorFunc _errfunc;\r
85         void *_errtarget;\r
86         SQSharedState *_ss;\r
87 };\r
88 \r
89 \r
90 #endif //_SQFUNCSTATE_H_\r
91 \r