- More work on scripting interface
[supertux.git] / src / 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 \r
8 \r
9 struct SQFuncState\r
10 {\r
11         SQFuncState(SQSharedState *ss,SQFunctionProto *func,SQFuncState *parent);\r
12 #ifdef _DEBUG_DUMP\r
13         void Dump();\r
14 #endif\r
15         void AddInstruction(SQOpcode _op,int arg0=0,int arg1=0,int arg2=0,int arg3=0){SQInstruction i(_op,arg0,arg1,arg2,arg3);AddInstruction(i);}\r
16         void AddInstruction(SQInstruction &i);\r
17         void SetIntructionParams(int pos,int arg0,int arg1,int arg2=0,int arg3=0);\r
18         void SetIntructionParam(int pos,int arg,int val);\r
19         SQInstruction &GetInstruction(int pos){return _instructions[pos];}\r
20         void PopInstructions(int size){for(int i=0;i<size;i++)_instructions.pop_back();}\r
21         void SetStackSize(int n);\r
22         void SnoozeOpt(){_optimization=false;}\r
23         int GetCurrentPos(){return _instructions.size()-1;}\r
24         int GetStringConstant(const SQChar *cons);\r
25         int GetNumericConstant(const SQInteger cons);\r
26         int GetNumericConstant(const SQFloat cons);\r
27         int PushLocalVariable(const SQObjectPtr &name);\r
28         void AddParameter(const SQObjectPtr &name);\r
29         void AddOuterValue(const SQObjectPtr &name);\r
30         int GetLocalVariable(const SQObjectPtr &name);\r
31         int GetOuterVariable(const SQObjectPtr &name);\r
32         int GenerateCode();\r
33         int GetStackSize();\r
34         int CalcStackFrameSize();\r
35         void AddLineInfos(int line,bool lineop,bool force=false);\r
36         void Finalize();\r
37         int AllocStackPos();\r
38         int PushTarget(int n=-1);\r
39         int PopTarget();\r
40         int TopTarget();\r
41         int GetUpTarget(int n);\r
42         bool IsLocal(unsigned int stkpos);\r
43         SQObject CreateString(const SQChar *s);\r
44         int _returnexp;\r
45         SQLocalVarInfoVec _vlocals;\r
46         SQIntVec _targetstack;\r
47         int _stacksize;\r
48         bool _varparams;\r
49         SQIntVec _unresolvedbreaks;\r
50         SQIntVec _unresolvedcontinues;\r
51         SQObjectPtrVec _functions;\r
52         SQObjectPtrVec _parameters;\r
53         SQObjectPtrVec _stringrefs;\r
54         SQOuterVarVec _outervalues;\r
55         SQInstructionVec _instructions;\r
56         SQLocalVarInfoVec _localvarinfos;\r
57         SQObjectPtr _literals;\r
58         SQInteger _nliterals;\r
59         SQLineInfoVec _lineinfos;\r
60         SQObjectPtr _func;\r
61         SQFuncState *_parent;\r
62         SQIntVec _breaktargets; //contains number of nested exception traps\r
63         SQIntVec _continuetargets;\r
64         int _lastline;\r
65         int _traps;\r
66         bool _optimization;\r
67         SQSharedState *_sharedstate;\r
68 private:\r
69         int GetConstant(SQObjectPtr cons);\r
70 };\r
71 \r
72 \r
73 #endif //_SQFUNCSTATE_H_\r
74 \r