Update SQUIRREL to 2.2.5
[supertux.git] / external / squirrel / squirrel / sqfuncproto.h
old mode 100644 (file)
new mode 100755 (executable)
index 6092dbe..50c6fd7
-/*     see copyright notice in squirrel.h */
-#ifndef _SQFUNCTION_H_
-#define _SQFUNCTION_H_
-
-#include "sqopcodes.h"
-
-enum SQOuterType {
-       otLOCAL = 0,
-       otSYMBOL = 1,
-       otOUTER = 2
-};
-
-struct SQOuterVar
-{
-       
-       SQOuterVar(){}
-       SQOuterVar(const SQObjectPtr &name,const SQObjectPtr &src,SQOuterType t)
-       {
-               _name = name;
-               _src=src;
-               _type=t;
-       }
-       SQOuterVar(const SQOuterVar &ov)
-       {
-               _type=ov._type;
-               _src=ov._src;
-               _name=ov._name;
-       }
-       SQOuterType _type;
-       SQObjectPtr _name;
-       SQObjectPtr _src;
-};
-
-struct SQLocalVarInfo
-{
-       SQLocalVarInfo():_start_op(0),_end_op(0){}
-       SQLocalVarInfo(const SQLocalVarInfo &lvi)
-       {
-               _name=lvi._name;
-               _start_op=lvi._start_op;
-               _end_op=lvi._end_op;
-               _pos=lvi._pos;
-       }
-       SQObjectPtr _name;
-       SQUnsignedInteger _start_op;
-       SQUnsignedInteger _end_op;
-       SQUnsignedInteger _pos;
-};
-
-struct SQLineInfo { SQInteger _line;SQInteger _op; };
-
-typedef sqvector<SQOuterVar> SQOuterVarVec;
-typedef sqvector<SQLocalVarInfo> SQLocalVarInfoVec;
-typedef sqvector<SQLineInfo> SQLineInfoVec;
-
-#define _FUNC_SIZE(ni,nl,nparams,nfuncs,nouters,nlineinf,localinf,defparams) (sizeof(SQFunctionProto) \
-               +((ni-1)*sizeof(SQInstruction))+(nl*sizeof(SQObjectPtr)) \
-               +(nparams*sizeof(SQObjectPtr))+(nfuncs*sizeof(SQObjectPtr)) \
-               +(nouters*sizeof(SQOuterVar))+(nlineinf*sizeof(SQLineInfo)) \
-               +(localinf*sizeof(SQLocalVarInfo))+(defparams*sizeof(SQInteger)))
-
-#define _CONSTRUCT_VECTOR(type,size,ptr) { \
-       for(SQInteger n = 0; n < size; n++) { \
-                       new (&ptr[n]) type(); \
-               } \
-}
-
-#define _DESTRUCT_VECTOR(type,size,ptr) { \
-       for(SQInteger nl = 0; nl < size; nl++) { \
-                       ptr[nl].~type(); \
-       } \
-}
-struct SQFunctionProto : public SQRefCounted
-{
-private:
-       SQFunctionProto(){
-       _stacksize=0;
-       _bgenerator=false;}
-public:
-       static SQFunctionProto *Create(SQInteger ninstructions,
-               SQInteger nliterals,SQInteger nparameters,
-               SQInteger nfunctions,SQInteger noutervalues,
-               SQInteger nlineinfos,SQInteger nlocalvarinfos,SQInteger ndefaultparams)
-       {
-               SQFunctionProto *f;
-               //I compact the whole class and members in a single memory allocation
-               f = (SQFunctionProto *)sq_vm_malloc(_FUNC_SIZE(ninstructions,nliterals,nparameters,nfunctions,noutervalues,nlineinfos,nlocalvarinfos,ndefaultparams));
-               new (f) SQFunctionProto;
-               f->_ninstructions = ninstructions;
-               f->_literals = (SQObjectPtr*)&f->_instructions[ninstructions];
-               f->_nliterals = nliterals;
-               f->_parameters = (SQObjectPtr*)&f->_literals[nliterals];
-               f->_nparameters = nparameters;
-               f->_functions = (SQObjectPtr*)&f->_parameters[nparameters];
-               f->_nfunctions = nfunctions;
-               f->_outervalues = (SQOuterVar*)&f->_functions[nfunctions];
-               f->_noutervalues = noutervalues;
-               f->_lineinfos = (SQLineInfo *)&f->_outervalues[noutervalues];
-               f->_nlineinfos = nlineinfos;
-               f->_localvarinfos = (SQLocalVarInfo *)&f->_lineinfos[nlineinfos];
-               f->_nlocalvarinfos = nlocalvarinfos;
-               f->_defaultparams = (SQInteger *)&f->_localvarinfos[nlocalvarinfos];
-               f->_ndefaultparams = ndefaultparams;
-
-               _CONSTRUCT_VECTOR(SQObjectPtr,f->_nliterals,f->_literals);
-               _CONSTRUCT_VECTOR(SQObjectPtr,f->_nparameters,f->_parameters);
-               _CONSTRUCT_VECTOR(SQObjectPtr,f->_nfunctions,f->_functions);
-               _CONSTRUCT_VECTOR(SQOuterVar,f->_noutervalues,f->_outervalues);
-               //_CONSTRUCT_VECTOR(SQLineInfo,f->_nlineinfos,f->_lineinfos); //not required are 2 integers
-               _CONSTRUCT_VECTOR(SQLocalVarInfo,f->_nlocalvarinfos,f->_localvarinfos);
-               return f;
-       }
-       void Release(){ 
-               _DESTRUCT_VECTOR(SQObjectPtr,_nliterals,_literals);
-               _DESTRUCT_VECTOR(SQObjectPtr,_nparameters,_parameters);
-               _DESTRUCT_VECTOR(SQObjectPtr,_nfunctions,_functions);
-               _DESTRUCT_VECTOR(SQOuterVar,_noutervalues,_outervalues);
-               //_DESTRUCT_VECTOR(SQLineInfo,_nlineinfos,_lineinfos); //not required are 2 integers
-               _DESTRUCT_VECTOR(SQLocalVarInfo,_nlocalvarinfos,_localvarinfos);
-               SQInteger size = _FUNC_SIZE(_ninstructions,_nliterals,_nparameters,_nfunctions,_noutervalues,_nlineinfos,_nlocalvarinfos,_ndefaultparams);
-               this->~SQFunctionProto();
-               sq_vm_free(this,size);
-       }
-       const SQChar* GetLocal(SQVM *v,SQUnsignedInteger stackbase,SQUnsignedInteger nseq,SQUnsignedInteger nop);
-       SQInteger GetLine(SQInstruction *curr);
-       bool Save(SQVM *v,SQUserPointer up,SQWRITEFUNC write);
-       static bool Load(SQVM *v,SQUserPointer up,SQREADFUNC read,SQObjectPtr &ret);
-
-       SQObjectPtr _sourcename;
-       SQObjectPtr _name;
-    SQInteger _stacksize;
-       bool _bgenerator;
-       bool _varparams;
-
-       SQInteger _nlocalvarinfos;
-       SQLocalVarInfo *_localvarinfos;
-
-       SQInteger _nlineinfos;
-       SQLineInfo *_lineinfos;
-
-       SQInteger _nliterals;
-       SQObjectPtr *_literals;
-
-       SQInteger _nparameters;
-       SQObjectPtr *_parameters;
-       
-       SQInteger _nfunctions;
-       SQObjectPtr *_functions;
-
-       SQInteger _noutervalues;
-       SQOuterVar *_outervalues;
-
-       SQInteger _ndefaultparams;
-       SQInteger *_defaultparams;
-       
-       SQInteger _ninstructions;
-       SQInstruction _instructions[1];
-};
-
-#endif //_SQFUNCTION_H_
+/*     see copyright notice in squirrel.h */\r
+#ifndef _SQFUNCTION_H_\r
+#define _SQFUNCTION_H_\r
+\r
+#include "sqopcodes.h"\r
+\r
+enum SQOuterType {\r
+       otLOCAL = 0,\r
+       otSYMBOL = 1,\r
+       otOUTER = 2\r
+};\r
+\r
+struct SQOuterVar\r
+{\r
+       \r
+       SQOuterVar(){}\r
+       SQOuterVar(const SQObjectPtr &name,const SQObjectPtr &src,SQOuterType t)\r
+       {\r
+               _name = name;\r
+               _src=src;\r
+               _type=t;\r
+       }\r
+       SQOuterVar(const SQOuterVar &ov)\r
+       {\r
+               _type=ov._type;\r
+               _src=ov._src;\r
+               _name=ov._name;\r
+       }\r
+       SQOuterType _type;\r
+       SQObjectPtr _name;\r
+       SQObjectPtr _src;\r
+};\r
+\r
+struct SQLocalVarInfo\r
+{\r
+       SQLocalVarInfo():_start_op(0),_end_op(0){}\r
+       SQLocalVarInfo(const SQLocalVarInfo &lvi)\r
+       {\r
+               _name=lvi._name;\r
+               _start_op=lvi._start_op;\r
+               _end_op=lvi._end_op;\r
+               _pos=lvi._pos;\r
+       }\r
+       SQObjectPtr _name;\r
+       SQUnsignedInteger _start_op;\r
+       SQUnsignedInteger _end_op;\r
+       SQUnsignedInteger _pos;\r
+};\r
+\r
+struct SQLineInfo { SQInteger _line;SQInteger _op; };\r
+\r
+typedef sqvector<SQOuterVar> SQOuterVarVec;\r
+typedef sqvector<SQLocalVarInfo> SQLocalVarInfoVec;\r
+typedef sqvector<SQLineInfo> SQLineInfoVec;\r
+\r
+#define _FUNC_SIZE(ni,nl,nparams,nfuncs,nouters,nlineinf,localinf,defparams) (sizeof(SQFunctionProto) \\r
+               +((ni-1)*sizeof(SQInstruction))+(nl*sizeof(SQObjectPtr)) \\r
+               +(nparams*sizeof(SQObjectPtr))+(nfuncs*sizeof(SQObjectPtr)) \\r
+               +(nouters*sizeof(SQOuterVar))+(nlineinf*sizeof(SQLineInfo)) \\r
+               +(localinf*sizeof(SQLocalVarInfo))+(defparams*sizeof(SQInteger)))\r
+\r
+#define _CONSTRUCT_VECTOR(type,size,ptr) { \\r
+       for(SQInteger n = 0; n < size; n++) { \\r
+                       new (&ptr[n]) type(); \\r
+               } \\r
+}\r
+\r
+#define _DESTRUCT_VECTOR(type,size,ptr) { \\r
+       for(SQInteger nl = 0; nl < size; nl++) { \\r
+                       ptr[nl].~type(); \\r
+       } \\r
+}\r
+struct SQFunctionProto : public SQRefCounted\r
+{\r
+private:\r
+       SQFunctionProto(){\r
+       _stacksize=0;\r
+       _bgenerator=false;}\r
+public:\r
+       static SQFunctionProto *Create(SQInteger ninstructions,\r
+               SQInteger nliterals,SQInteger nparameters,\r
+               SQInteger nfunctions,SQInteger noutervalues,\r
+               SQInteger nlineinfos,SQInteger nlocalvarinfos,SQInteger ndefaultparams)\r
+       {\r
+               SQFunctionProto *f;\r
+               //I compact the whole class and members in a single memory allocation\r
+               f = (SQFunctionProto *)sq_vm_malloc(_FUNC_SIZE(ninstructions,nliterals,nparameters,nfunctions,noutervalues,nlineinfos,nlocalvarinfos,ndefaultparams));\r
+               new (f) SQFunctionProto;\r
+               f->_ninstructions = ninstructions;\r
+               f->_literals = (SQObjectPtr*)&f->_instructions[ninstructions];\r
+               f->_nliterals = nliterals;\r
+               f->_parameters = (SQObjectPtr*)&f->_literals[nliterals];\r
+               f->_nparameters = nparameters;\r
+               f->_functions = (SQObjectPtr*)&f->_parameters[nparameters];\r
+               f->_nfunctions = nfunctions;\r
+               f->_outervalues = (SQOuterVar*)&f->_functions[nfunctions];\r
+               f->_noutervalues = noutervalues;\r
+               f->_lineinfos = (SQLineInfo *)&f->_outervalues[noutervalues];\r
+               f->_nlineinfos = nlineinfos;\r
+               f->_localvarinfos = (SQLocalVarInfo *)&f->_lineinfos[nlineinfos];\r
+               f->_nlocalvarinfos = nlocalvarinfos;\r
+               f->_defaultparams = (SQInteger *)&f->_localvarinfos[nlocalvarinfos];\r
+               f->_ndefaultparams = ndefaultparams;\r
+\r
+               _CONSTRUCT_VECTOR(SQObjectPtr,f->_nliterals,f->_literals);\r
+               _CONSTRUCT_VECTOR(SQObjectPtr,f->_nparameters,f->_parameters);\r
+               _CONSTRUCT_VECTOR(SQObjectPtr,f->_nfunctions,f->_functions);\r
+               _CONSTRUCT_VECTOR(SQOuterVar,f->_noutervalues,f->_outervalues);\r
+               //_CONSTRUCT_VECTOR(SQLineInfo,f->_nlineinfos,f->_lineinfos); //not required are 2 integers\r
+               _CONSTRUCT_VECTOR(SQLocalVarInfo,f->_nlocalvarinfos,f->_localvarinfos);\r
+               return f;\r
+       }\r
+       void Release(){ \r
+               _DESTRUCT_VECTOR(SQObjectPtr,_nliterals,_literals);\r
+               _DESTRUCT_VECTOR(SQObjectPtr,_nparameters,_parameters);\r
+               _DESTRUCT_VECTOR(SQObjectPtr,_nfunctions,_functions);\r
+               _DESTRUCT_VECTOR(SQOuterVar,_noutervalues,_outervalues);\r
+               //_DESTRUCT_VECTOR(SQLineInfo,_nlineinfos,_lineinfos); //not required are 2 integers\r
+               _DESTRUCT_VECTOR(SQLocalVarInfo,_nlocalvarinfos,_localvarinfos);\r
+               SQInteger size = _FUNC_SIZE(_ninstructions,_nliterals,_nparameters,_nfunctions,_noutervalues,_nlineinfos,_nlocalvarinfos,_ndefaultparams);\r
+               this->~SQFunctionProto();\r
+               sq_vm_free(this,size);\r
+       }\r
+       const SQChar* GetLocal(SQVM *v,SQUnsignedInteger stackbase,SQUnsignedInteger nseq,SQUnsignedInteger nop);\r
+       SQInteger GetLine(SQInstruction *curr);\r
+       bool Save(SQVM *v,SQUserPointer up,SQWRITEFUNC write);\r
+       static bool Load(SQVM *v,SQUserPointer up,SQREADFUNC read,SQObjectPtr &ret);\r
+\r
+       SQObjectPtr _sourcename;\r
+       SQObjectPtr _name;\r
+    SQInteger _stacksize;\r
+       bool _bgenerator;\r
+       bool _varparams;\r
+\r
+       SQInteger _nlocalvarinfos;\r
+       SQLocalVarInfo *_localvarinfos;\r
+\r
+       SQInteger _nlineinfos;\r
+       SQLineInfo *_lineinfos;\r
+\r
+       SQInteger _nliterals;\r
+       SQObjectPtr *_literals;\r
+\r
+       SQInteger _nparameters;\r
+       SQObjectPtr *_parameters;\r
+       \r
+       SQInteger _nfunctions;\r
+       SQObjectPtr *_functions;\r
+\r
+       SQInteger _noutervalues;\r
+       SQOuterVar *_outervalues;\r
+\r
+       SQInteger _ndefaultparams;\r
+       SQInteger *_defaultparams;\r
+       \r
+       SQInteger _ninstructions;\r
+       SQInstruction _instructions[1];\r
+};\r
+\r
+#endif //_SQFUNCTION_H_\r