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