b4079b0bf7119557688f9a90e352f7471d07dd9a
[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         SQUnsignedInteger _start_op;\r
46         SQUnsignedInteger _end_op;\r
47         SQUnsignedInteger _pos;\r
48 };\r
49 \r
50 struct SQLineInfo { SQInteger _line;SQInteger _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         _stacksize=0;\r
61         _bgenerator=false;}\r
62 public:\r
63         static SQFunctionProto *Create()\r
64         {\r
65                 SQFunctionProto *f;\r
66                 sq_new(f,SQFunctionProto);\r
67                 return f;\r
68         }\r
69         void Release(){ sq_delete(this,SQFunctionProto);}\r
70         const SQChar* GetLocal(SQVM *v,SQUnsignedInteger stackbase,SQUnsignedInteger nseq,SQUnsignedInteger nop);\r
71         SQInteger GetLine(SQInstruction *curr);\r
72         bool Save(SQVM *v,SQUserPointer up,SQWRITEFUNC write);\r
73         bool Load(SQVM *v,SQUserPointer up,SQREADFUNC read);\r
74         SQObjectPtrVec _literals;\r
75         SQObjectPtrVec _functions;\r
76         SQObjectPtrVec _parameters;\r
77         SQOuterVarVec _outervalues;\r
78         SQInstructionVec _instructions;\r
79         SQObjectPtr _sourcename;\r
80         SQObjectPtr _name;\r
81         SQLocalVarInfoVec _localvarinfos;\r
82         SQLineInfoVec _lineinfos;\r
83     SQInteger _stacksize;\r
84         bool _bgenerator;\r
85         bool _varparams;\r
86 };\r
87 \r
88 #endif //_SQFUNCTION_H_\r