mirror of https://github.com/OpenTTD/OpenTTD
(svn r26834) -Fix [Squirrel]: prevent unitialized memory warning by moving code from (static) Init to constructure for SQFunctionProto
parent
12bd7532ba
commit
7176f65edf
|
@ -7,13 +7,13 @@
|
||||||
enum SQOuterType {
|
enum SQOuterType {
|
||||||
otLOCAL = 0,
|
otLOCAL = 0,
|
||||||
otSYMBOL = 1,
|
otSYMBOL = 1,
|
||||||
otOUTER = 2
|
otOUTER = 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SQOuterVar
|
struct SQOuterVar
|
||||||
{
|
{
|
||||||
|
|
||||||
SQOuterVar(){}
|
SQOuterVar() : _type(otLOCAL) {}
|
||||||
SQOuterVar(const SQObjectPtr &name,const SQObjectPtr &src,SQOuterType t)
|
SQOuterVar(const SQObjectPtr &name,const SQObjectPtr &src,SQOuterType t)
|
||||||
{
|
{
|
||||||
_name = name;
|
_name = name;
|
||||||
|
@ -33,7 +33,7 @@ struct SQOuterVar
|
||||||
|
|
||||||
struct SQLocalVarInfo
|
struct SQLocalVarInfo
|
||||||
{
|
{
|
||||||
SQLocalVarInfo():_start_op(0),_end_op(0){}
|
SQLocalVarInfo():_start_op(0),_end_op(0), _pos(0){}
|
||||||
SQLocalVarInfo(const SQLocalVarInfo &lvi)
|
SQLocalVarInfo(const SQLocalVarInfo &lvi)
|
||||||
{
|
{
|
||||||
_name=lvi._name;
|
_name=lvi._name;
|
||||||
|
@ -73,9 +73,36 @@ typedef sqvector<SQLineInfo> SQLineInfoVec;
|
||||||
struct SQFunctionProto : public SQRefCounted
|
struct SQFunctionProto : public SQRefCounted
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
SQFunctionProto(){
|
SQFunctionProto(SQInteger ninstructions,
|
||||||
|
SQInteger nliterals,SQInteger nparameters,
|
||||||
|
SQInteger nfunctions,SQInteger noutervalues,
|
||||||
|
SQInteger nlineinfos,SQInteger nlocalvarinfos,SQInteger ndefaultparams)
|
||||||
|
{
|
||||||
_stacksize=0;
|
_stacksize=0;
|
||||||
_bgenerator=false;}
|
_bgenerator=false;
|
||||||
|
_ninstructions = ninstructions;
|
||||||
|
_literals = (SQObjectPtr*)&_instructions[ninstructions];
|
||||||
|
_nliterals = nliterals;
|
||||||
|
_parameters = (SQObjectPtr*)&_literals[nliterals];
|
||||||
|
_nparameters = nparameters;
|
||||||
|
_functions = (SQObjectPtr*)&_parameters[nparameters];
|
||||||
|
_nfunctions = nfunctions;
|
||||||
|
_outervalues = (SQOuterVar*)&_functions[nfunctions];
|
||||||
|
_noutervalues = noutervalues;
|
||||||
|
_lineinfos = (SQLineInfo *)&_outervalues[noutervalues];
|
||||||
|
_nlineinfos = nlineinfos;
|
||||||
|
_localvarinfos = (SQLocalVarInfo *)&_lineinfos[nlineinfos];
|
||||||
|
_nlocalvarinfos = nlocalvarinfos;
|
||||||
|
_defaultparams = (SQInteger *)&_localvarinfos[nlocalvarinfos];
|
||||||
|
_ndefaultparams = ndefaultparams;
|
||||||
|
|
||||||
|
_CONSTRUCT_VECTOR(SQObjectPtr,_nliterals,_literals);
|
||||||
|
_CONSTRUCT_VECTOR(SQObjectPtr,_nparameters,_parameters);
|
||||||
|
_CONSTRUCT_VECTOR(SQObjectPtr,_nfunctions,_functions);
|
||||||
|
_CONSTRUCT_VECTOR(SQOuterVar,_noutervalues,_outervalues);
|
||||||
|
//_CONSTRUCT_VECTOR(SQLineInfo,_nlineinfos,_lineinfos); //not required are 2 integers
|
||||||
|
_CONSTRUCT_VECTOR(SQLocalVarInfo,_nlocalvarinfos,_localvarinfos);
|
||||||
|
}
|
||||||
public:
|
public:
|
||||||
static SQFunctionProto *Create(SQInteger ninstructions,
|
static SQFunctionProto *Create(SQInteger ninstructions,
|
||||||
SQInteger nliterals,SQInteger nparameters,
|
SQInteger nliterals,SQInteger nparameters,
|
||||||
|
@ -85,29 +112,7 @@ public:
|
||||||
SQFunctionProto *f;
|
SQFunctionProto *f;
|
||||||
//I compact the whole class and members in a single memory allocation
|
//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));
|
f = (SQFunctionProto *)sq_vm_malloc(_FUNC_SIZE(ninstructions,nliterals,nparameters,nfunctions,noutervalues,nlineinfos,nlocalvarinfos,ndefaultparams));
|
||||||
new (f) SQFunctionProto;
|
new (f) SQFunctionProto(ninstructions, nliterals, nparameters, nfunctions, noutervalues, nlineinfos, nlocalvarinfos, ndefaultparams);
|
||||||
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;
|
return f;
|
||||||
}
|
}
|
||||||
void Release(){
|
void Release(){
|
||||||
|
|
Loading…
Reference in New Issue