2
0
Эх сурвалжийг харах

Now SquiLu parse and store function parameters type and return type following the typescript parameter definition style.
The type information is availabale through function.getinfos() method.
See samples/generate-cpp-class-wrapper.nut

mingodad 9 жил өмнө
parent
commit
de8643bc87

+ 29 - 8
SquiLu/samples/generate-cpp-class-wrapper.nut

@@ -22,19 +22,33 @@ function generateCppClassWrapper(klass, klass_name="klass")
 		print(rename_code(code));
 	}
 	
-	local get_var_type = function(var_name, to_declare=false)
+	local get_var_type = function(var_type, to_declare=false)
+	{
+		switch(var_type)
+		{
+			case "int":
+				return to_declare ? "i" : "INTEGER";
+			case "float":
+				return to_declare ? "f" : "FLOAT";
+			case "str":
+				return to_declare ? "s" : "STRING";
+		}
+		return null;
+	}
+
+	local get_var_type_from_name = function(var_name, to_declare=false)
 	{
 		if(var_name.startswith("int_"))
 		{
-			return to_declare ? "i" : "INTEGER";
+			return get_var_type("int", to_declare);
 		}
 		if(var_name.startswith("float_"))
 		{
-			return to_declare ? "f" : "FLOAT";
+			return get_var_type("float", to_declare);
 		}
 		if(var_name.startswith("str_"))
 		{
-			return to_declare ? "s" : "STRING";
+			return get_var_type("str", to_declare);
 		}
 		return to_declare ? "." : "STRING";
 	}
@@ -130,7 +144,8 @@ static SQRESULT klass_constructor(HSQUIRRELVM v, KLASS *klass, int free_on_gc)
 				for(local i=1; i < nparams; ++i)
 				{
 					local hasDefParam = ndefparams && (i >= firstDefParam);
-					local vtype = get_var_type(info.parameters[i]);
+					local vtype = get_var_type(info.parameters_type[i]);
+					if(!vtype) vtype = get_var_type_from_name(info.parameters[i]);
 					if(hasDefParam) print(format("\tSQ_OPT_%s(v, %d, %s, %q);", vtype, i+1, info.parameters[i], info.defparams[i - firstDefParam].tostring()));
 					else print(format("\tSQ_GET_%s(v, %d, %s);", vtype, i+1, info.parameters[i]));
 				}
@@ -147,10 +162,14 @@ static SQRESULT klass_constructor(HSQUIRRELVM v, KLASS *klass, int free_on_gc)
 					}
 				}
 			}
-			//local return_type = 
+			local return_type = info.return_type;
+			if(return_type)
+			{
+				print("\n\tsq_push" + return_type + "(v, " return_type + ");");
+			}
 			local attr = klass.getattributes(info.name);
 			if(attr && attr.rawin("cfunc")) print("//", attr.rawget("cfunc"));
-			print("\n\treturn 0;\n}\n");
+			print("\n\treturn " + (return_type ? 1 : 0) + ";\n}\n");
 		}
 	}
 	
@@ -173,7 +192,9 @@ static SQRegFunction klass_obj_funcs[]={
 			
 			for(local i=1; i < nparams; ++i)
 			{
-				stdout.write(get_var_type(info.parameters[i], true));
+				local vtype = get_var_type(info.parameters_type[i], true)
+				if(!vtype) vtype = get_var_type_from_name(info.parameters[i], true)
+				stdout.write(vtype);
 			}
 			stdout.write("\")),\n");
 		}

+ 5 - 1
SquiLu/squirrel/sqbaselib.cpp

@@ -2024,9 +2024,11 @@ static SQRESULT closure_getinfos(HSQUIRRELVM v) {
 		SQFunctionProto *f = _closure(o)->_function;
 		SQInteger nparams = f->_nparameters + (f->_varparams?1:0);
 		SQObjectPtr params = SQArray::Create(_ss(v),nparams);
-    SQObjectPtr defparams = SQArray::Create(_ss(v),f->_ndefaultparams);
+		SQObjectPtr params_type = SQArray::Create(_ss(v),nparams);
+        SQObjectPtr defparams = SQArray::Create(_ss(v),f->_ndefaultparams);
 		for(SQInteger n = 0; n<f->_nparameters; n++) {
 			_array(params)->Set((SQInteger)n,f->_parameters[n]);
+			_array(params_type)->Set((SQInteger)n,f->_parameters_type[n]);
 		}
     for(SQInteger j = 0; j<f->_ndefaultparams; j++) {
 			_array(defparams)->Set((SQInteger)j,_closure(o)->_defaultparams[j]);
@@ -2036,8 +2038,10 @@ static SQRESULT closure_getinfos(HSQUIRRELVM v) {
 		}
 		res->NewSlot(SQString::Create(_ss(v),_SC("native"),-1),false);
 		res->NewSlot(SQString::Create(_ss(v),_SC("name"),-1),f->_name);
+		res->NewSlot(SQString::Create(_ss(v),_SC("return_type"),-1),f->_return_type);
 		res->NewSlot(SQString::Create(_ss(v),_SC("src"),-1),f->_sourcename);
 		res->NewSlot(SQString::Create(_ss(v),_SC("parameters"),-1),params);
+		res->NewSlot(SQString::Create(_ss(v),_SC("parameters_type"),-1),params_type);
 		res->NewSlot(SQString::Create(_ss(v),_SC("varargs"),-1),f->_varparams);
     res->NewSlot(SQString::Create(_ss(v),_SC("defparams"),-1),defparams);
 	}

+ 2 - 0
SquiLu/squirrel/sqcompiler.cpp

@@ -1897,6 +1897,7 @@ error:
 				//param type specifier like typescript
 				Lex();
 				type_name = ExpectTypeToken();
+				funcstate->AddParameterTypeName(type_name);
 				//printf("%d %s\n", __LINE__, _stringval(type_name));
 			}
 			else {
@@ -1911,6 +1912,7 @@ error:
 			//return type specifier like typescript
 			Lex();
 			type_name = ExpectTypeToken();
+			funcstate->_return_type = type_name;
 			//printf("%d %s\n", __LINE__, _stringval(type_name));
 		}
 

+ 188 - 176
SquiLu/squirrel/sqfuncproto.h

@@ -1,181 +1,193 @@
-/*	see copyright notice in squirrel.h */
-#ifndef _SQFUNCTION_H_
-#define _SQFUNCTION_H_
-
-#include "sqopcodes.h"
-
-enum SQOuterType {
-	otLOCAL = 0,
-	otOUTER = 1
-};
-
-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;
-};
-
-#define _VAR_ANY			0x00000001
-#define _VAR_INTEGER		0x00000002
-#define _VAR_FLOAT			0x00000004
-#define _VAR_BOOL			0x00000008
-#define _VAR_STRING			0x00000010
-#define _VAR_TABLE			0x00000020
-#define _VAR_ARRAY			0x00000040
-#define _VAR_CLOSURE		0x00000080
-#define _VAR_CLASS			0x00000100
-#define _VAR_REFERENCE  	0x00000200
-#define _VAR_CONST  		0x00000400
-
-struct SQLocalVarInfo
-{
+/*	see copyright notice in squirrel.h */
+#ifndef _SQFUNCTION_H_
+#define _SQFUNCTION_H_
+
+#include "sqopcodes.h"
+
+enum SQOuterType {
+	otLOCAL = 0,
+	otOUTER = 1
+};
+
+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;
+};
+
+#define _VAR_ANY			0x00000001
+#define _VAR_INTEGER		0x00000002
+#define _VAR_FLOAT			0x00000004
+#define _VAR_BOOL			0x00000008
+#define _VAR_STRING			0x00000010
+#define _VAR_TABLE			0x00000020
+#define _VAR_ARRAY			0x00000040
+#define _VAR_CLOSURE		0x00000080
+#define _VAR_CLASS			0x00000100
+#define _VAR_REFERENCE  	0x00000200
+#define _VAR_CONST  		0x00000400
+
+struct SQLocalVarInfo
+{
 	SQLocalVarInfo():_start_op(0),_end_op(0),_pos(0),
-        _type(_VAR_ANY),_scope(0) {}
-	SQLocalVarInfo(const SQLocalVarInfo &lvi)
-	{
-		_name=lvi._name;
-		_start_op=lvi._start_op;
-		_end_op=lvi._end_op;
+        _type(_VAR_ANY),_scope(0) {}
+	SQLocalVarInfo(const SQLocalVarInfo &lvi)
+	{
+		_name=lvi._name;
+		_type_name=lvi._type_name;
+		_start_op=lvi._start_op;
+		_end_op=lvi._end_op;
 		_pos=lvi._pos;
-		_type=lvi._type;
+		_type=lvi._type;
 		_scope=lvi._scope;
-	}
-	SQObjectPtr _name;
-	SQUnsignedInteger _start_op;
-	SQUnsignedInteger _end_op;
-	SQUnsignedInteger _pos;
-	unsigned short _type;
+	}
+	SQObjectPtr _name;
+	SQObjectPtr _type_name;
+	SQUnsignedInteger _start_op;
+	SQUnsignedInteger _end_op;
+	SQUnsignedInteger _pos;
+	unsigned short _type;
 	unsigned short _scope;
-};
-
-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)))
-
-
-struct SQFunctionProto : public CHAINABLE_OBJ
-{
-private:
-	SQFunctionProto(SQSharedState *ss);
-	~SQFunctionProto();
-
-public:
-	static SQFunctionProto *Create(SQSharedState *ss,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(ss);
-		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);
+};
+
+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))+(/*param_types*/nparams*sizeof(SQObjectPtr)) \
+        +(nfuncs*sizeof(SQObjectPtr)) \
+		+(nouters*sizeof(SQOuterVar))+(nlineinf*sizeof(SQLineInfo)) \
+		+(localinf*sizeof(SQLocalVarInfo))+(defparams*sizeof(SQInteger)))
+
+
+struct SQFunctionProto : public CHAINABLE_OBJ
+{
+private:
+	SQFunctionProto(SQSharedState *ss);
+	~SQFunctionProto();
+
+public:
+	static SQFunctionProto *Create(SQSharedState *ss,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(ss);
+		f->_ninstructions = ninstructions;
+		//literals start at then end of _instructions
+		f->_literals = (SQObjectPtr*)&f->_instructions[ninstructions];
+		f->_nliterals = nliterals;
+		//parameters start at then end of _literals
+		f->_parameters = (SQObjectPtr*)&f->_literals[nliterals];
+		f->_nparameters = nparameters;
+		//the same as above repeat till the end
+		f->_parameters_type = (SQObjectPtr*)&f->_parameters[nparameters];
+		f->_functions = (SQObjectPtr*)&f->_parameters_type[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->_nparameters,f->_parameters_type);
+		_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,_nparameters,_parameters_type);
+		_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);
-	bool SaveAsSource(SQVM *v,SQUserPointer up,SQWRITEFUNC write);
-	static bool Load(SQVM *v,SQUserPointer up,SQREADFUNC read,SQObjectPtr &ret);
-
-#ifdef SQ_JIT_LLVM
-	void JitCompile();
-#endif
-
-#ifndef NO_GARBAGE_COLLECTOR
-	void Mark(SQCollectable **chain);
-	void Finalize(){ _NULL_SQOBJECT_VECTOR(_literals,_nliterals); }
-	SQObjectType GetType() {return OT_FUNCPROTO;}
-#endif
-	SQObjectPtr _sourcename;
-	SQObjectPtr _name;
-    SQInteger _stacksize;
-	bool _bgenerator;
-	SQInteger _varparams;
-
-#ifdef SQ_JIT_LLVM
-	llvm::Function* _jitfunction;
-#endif
-
-	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_
+	bool SaveAsSource(SQVM *v,SQUserPointer up,SQWRITEFUNC write);
+	static bool Load(SQVM *v,SQUserPointer up,SQREADFUNC read,SQObjectPtr &ret);
+
+#ifdef SQ_JIT_LLVM
+	void JitCompile();
+#endif
+
+#ifndef NO_GARBAGE_COLLECTOR
+	void Mark(SQCollectable **chain);
+	void Finalize(){ _NULL_SQOBJECT_VECTOR(_literals,_nliterals); }
+	SQObjectType GetType() {return OT_FUNCPROTO;}
+#endif
+	SQObjectPtr _sourcename;
+	SQObjectPtr _name;
+	SQObjectPtr _return_type;
+    SQInteger _stacksize;
+	bool _bgenerator;
+	SQInteger _varparams;
+
+#ifdef SQ_JIT_LLVM
+	llvm::Function* _jitfunction;
+#endif
+
+	SQInteger _nlocalvarinfos;
+	SQLocalVarInfo *_localvarinfos;
+
+	SQInteger _nlineinfos;
+	SQLineInfo *_lineinfos;
+
+	SQInteger _nliterals;
+	SQObjectPtr *_literals;
+
+	SQInteger _nparameters;
+	SQObjectPtr *_parameters;
+	SQObjectPtr *_parameters_type;
+
+	SQInteger _nfunctions;
+	SQObjectPtr *_functions;
+
+	SQInteger _noutervalues;
+	SQOuterVar *_outervalues;
+
+	SQInteger _ndefaultparams;
+	SQInteger *_defaultparams;
+
+	SQInteger _ninstructions;
+	SQInstruction _instructions[1];
+};
+
+#endif //_SQFUNCTION_H_

+ 7 - 0
SquiLu/squirrel/sqfuncstate.cpp

@@ -373,6 +373,11 @@ void SQFuncState::AddParameter(const SQObject &name, SQInteger scope, SQInteger
 	_parameters.push_back(name);
 }
 
+void SQFuncState::AddParameterTypeName(const SQObject &type_name)
+{
+	_vlocals.top()._type_name = type_name;
+}
+
 void SQFuncState::AddLineInfos(SQInteger line,bool lineop,bool force)
 {
 	if(_lastline!=line || force){
@@ -562,6 +567,7 @@ SQFunctionProto *SQFuncState::BuildProto()
 	f->_sourcename = _sourcename;
 	f->_bgenerator = _bgenerator;
 	f->_name = _name;
+	f->_return_type = _return_type;
 
 	while((idx=_table(_literals)->Next(false,refidx,key,val))!=-1) {
 		f->_literals[_integer(val)]=key;
@@ -570,6 +576,7 @@ SQFunctionProto *SQFuncState::BuildProto()
 
 	for(SQUnsignedInteger nf = 0; nf < _functions.size(); nf++) f->_functions[nf] = _functions[nf];
 	for(SQUnsignedInteger np = 0; np < _parameters.size(); np++) f->_parameters[np] = _parameters[np];
+	for(SQUnsignedInteger np = 0; np < _parameters.size(); np++) f->_parameters_type[np] = _vlocals[np]._type_name;
 	for(SQUnsignedInteger no = 0; no < _outervalues.size(); no++) f->_outervalues[no] = _outervalues[no];
 	for(SQUnsignedInteger nl = 0; nl < _localvarinfos.size(); nl++) f->_localvarinfos[nl] = _localvarinfos[nl];
 	for(SQUnsignedInteger ni = 0; ni < _lineinfos.size(); ni++) f->_lineinfos[ni] = _lineinfos[ni];

+ 2 - 0
SquiLu/squirrel/sqfuncstate.h

@@ -30,6 +30,7 @@ struct SQFuncState
 	SQInteger GetNumericConstant(const SQFloat cons);
 	SQInteger PushLocalVariable(const SQObject &name, SQInteger scope, SQInteger type=_VAR_ANY);
 	void AddParameter(const SQObject &name, SQInteger scope, SQInteger type=_VAR_ANY);
+	void AddParameterTypeName(const SQObject &type_name);
 	//void AddOuterValue(const SQObject &name);
 	SQInteger GetLocalVariable(const SQObject &name);
 	void MarkLocalAsOuter(SQInteger pos);
@@ -66,6 +67,7 @@ struct SQFuncState
 	SQObjectPtr _literals;
 	SQObjectPtr _strings;
 	SQObjectPtr _name;
+	SQObjectPtr _return_type;
 	SQObjectPtr _sourcename;
 	SQInteger _nliterals;
 	SQLineInfoVec _lineinfos;