ab45ba243a649c932c6a81ec35cbb35c9849fd6a
[supertux.git] / src / squirrel / squirrel / sqfuncproto.h
1 /*      see copyright notice in squirrel.h */\r
2 #ifndef _SQFUNCTION_H_\r
3 #define _SQFUNCTION_H_\r
4 \r
5 #include "sqopcodes.h"\r
6 \r
7 enum SQOuterType {\r
8         otLOCAL = 0,\r
9         otSYMBOL = 1,\r
10         otOUTER = 2\r
11 };\r
12 \r
13 struct SQOuterVar\r
14 {\r
15         \r
16         SQOuterVar(){}\r
17         SQOuterVar(const SQObjectPtr &name,const SQObjectPtr &src,SQOuterType t)\r
18         {\r
19                 _name = name;\r
20                 _src=src;\r
21                 _type=t;\r
22         }\r
23         SQOuterVar(const SQOuterVar &ov)\r
24         {\r
25                 _type=ov._type;\r
26                 _src=ov._src;\r
27                 _name=ov._name;\r
28         }\r
29         SQOuterType _type;\r
30         SQObjectPtr _name;\r
31         SQObjectPtr _src;\r
32 };\r
33 \r
34 struct SQLocalVarInfo\r
35 {\r
36         SQLocalVarInfo():_start_op(0),_end_op(0){}\r
37         SQLocalVarInfo(const SQLocalVarInfo &lvi)\r
38         {\r
39                 _name=lvi._name;\r
40                 _start_op=lvi._start_op;\r
41                 _end_op=lvi._end_op;\r
42                 _pos=lvi._pos;\r
43         }\r
44         SQObjectPtr _name;\r
45         unsigned int _start_op;\r
46         unsigned int _end_op;\r
47         unsigned int _pos;\r
48 };\r
49 \r
50 struct SQLineInfo { int _line;int _op; };\r
51 \r
52 typedef sqvector<SQOuterVar> SQOuterVarVec;\r
53 typedef sqvector<SQLocalVarInfo> SQLocalVarInfoVec;\r
54 typedef sqvector<SQLineInfo> SQLineInfoVec;\r
55 \r
56 struct SQFunctionProto : public SQRefCounted\r
57 {\r
58 private:\r
59         SQFunctionProto(){\r
60                 _uiRef=0;\r
61         _stacksize=0;\r
62         _bgenerator=false;}\r
63 public:\r
64         static SQFunctionProto *Create()\r
65         {\r
66                 SQFunctionProto *f;\r
67                 sq_new(f,SQFunctionProto);\r
68                 return f;\r
69         }\r
70         void Release(){ sq_delete(this,SQFunctionProto);}\r
71         const SQChar* GetLocal(SQVM *v,unsigned int stackbase,unsigned int nseq,unsigned int nop);\r
72         int GetLine(SQInstruction *curr);\r
73         bool Save(SQVM *v,SQUserPointer up,SQWRITEFUNC write);\r
74         bool Load(SQVM *v,SQUserPointer up,SQREADFUNC read);\r
75         SQObjectPtrVec _literals;\r
76         SQObjectPtrVec _functions;\r
77         SQObjectPtrVec _parameters;\r
78         SQOuterVarVec _outervalues;\r
79         SQInstructionVec _instructions;\r
80         SQObjectPtr _sourcename;\r
81         SQObjectPtr _name;\r
82         SQLocalVarInfoVec _localvarinfos;\r
83         SQLineInfoVec _lineinfos;\r
84     int _stacksize;\r
85         bool _bgenerator;\r
86         bool _varparams;\r
87 };\r
88 \r
89 #endif //_SQFUNCTION_H_\r