136 lines
4.8 KiB
Haxe
136 lines
4.8 KiB
Haxe
|
/*
|
||
|
This file is used to generate Macros.h and DynamicImpl.h.
|
||
|
To change the number of "fast" args, you will also need to change numbers in the tpl files.
|
||
|
Usage: haxe -x GenMacro.hx
|
||
|
*/
|
||
|
|
||
|
import haxe.Template;
|
||
|
#if haxe3
|
||
|
import sys.io.File;
|
||
|
import sys.io.FileOutput;
|
||
|
#else
|
||
|
import neko.io.File;
|
||
|
import neko.io.FileOutput;
|
||
|
#end
|
||
|
|
||
|
class GenMacro
|
||
|
{
|
||
|
static var warning =
|
||
|
"// ## ## ## ## #### ## ## ## ## ## #### ##\n" +
|
||
|
"// ## ## ## ## ## ## ## ### ## ## ### ## ## ##\n" +
|
||
|
"// ## ## ## ###### ###### ###### ## ###### ## ### ##\n" +
|
||
|
"// ## ## ## ## ## ## ## ## ### ## ## ### ## ## \n" +
|
||
|
"// ## ## ## ## ## ## ## ## ## ## ## #### ##\n\n" +
|
||
|
"// DO NOT EDIT\n// This file is generated from the .tpl file\n";
|
||
|
|
||
|
public function new()
|
||
|
{
|
||
|
var context = { };
|
||
|
var params = new Array<Dynamic>();
|
||
|
var arr_list = new Array<String>();
|
||
|
var arg_list = new Array<String>();
|
||
|
var dynamic_arg_list = new Array<String>();
|
||
|
var dynamic_in_args = new Array<String>();
|
||
|
var dynamic_var_args = new Array<String>();
|
||
|
var dynamic_adds = new Array<String>();
|
||
|
|
||
|
for(arg in 0...27)
|
||
|
{
|
||
|
if (arg>0)
|
||
|
{
|
||
|
arr_list.push( "inArgs[" + (arg-1) + "]");
|
||
|
arg_list.push( "inArg" + (arg-1));
|
||
|
dynamic_arg_list.push("const Dynamic &inArg" + (arg-1) );
|
||
|
dynamic_adds.push( "->init(" + (arg-1) + ",inArg" + (arg-1) + ")" );
|
||
|
}
|
||
|
|
||
|
params.push( {
|
||
|
ARG : arg,
|
||
|
ARR_LIST : arr_list.join(","),
|
||
|
DYNAMIC_ARG_LIST : dynamic_arg_list.join(","),
|
||
|
ARG_LIST : arg_list.join(","),
|
||
|
DYNAMIC_ADDS : dynamic_adds.join("")
|
||
|
} );
|
||
|
}
|
||
|
|
||
|
var locals = new Array<Dynamic>();
|
||
|
var jumboLocals = new Array<Dynamic>();
|
||
|
var marks = new Array<String>();
|
||
|
var visits = new Array<String>();
|
||
|
var type_vars = new Array<String>();
|
||
|
var type_args = new Array<String>();
|
||
|
var construct_args = new Array<String>();
|
||
|
var construct_vars = new Array<String>();
|
||
|
for(arg in 1...62)
|
||
|
{
|
||
|
var vid = arg-1;
|
||
|
if (vid>=0)
|
||
|
{
|
||
|
marks.push( "HX_MARK_MEMBER(v" + vid +");" );
|
||
|
visits.push( "HX_VISIT_MEMBER(v" + vid +");" );
|
||
|
type_args.push( "t" + vid +",v" + vid );
|
||
|
type_vars.push( "t" + vid +" v" + vid );
|
||
|
construct_args.push( "t" + vid +" __" + vid );
|
||
|
construct_vars.push( "v" + vid +"(__" + vid + ")" );
|
||
|
}
|
||
|
|
||
|
var local = {
|
||
|
ARG : arg,
|
||
|
MARKS : marks.join(" "),
|
||
|
VISITS : visits.join(" "),
|
||
|
TYPE_VARS : type_vars.join(","),
|
||
|
TYPE_ARGS : type_args.join(","),
|
||
|
TYPE_DECL : type_vars.join(";"),
|
||
|
CONSTRUCT_VARS : construct_vars.join(","),
|
||
|
CONSTRUCT_ARGS : construct_args.join(",")
|
||
|
};
|
||
|
if (arg<20)
|
||
|
locals.push(local);
|
||
|
else
|
||
|
jumboLocals.push(local);
|
||
|
}
|
||
|
|
||
|
Reflect.setField(context, "PARAMS", params);
|
||
|
Reflect.setField(context, "LOCALS", locals);
|
||
|
Reflect.setField(context, "NS", "::");
|
||
|
Reflect.setField(context, "hxNS", " ::hx::");
|
||
|
|
||
|
var fixed = File.getContent("MacrosFixed.h");
|
||
|
fixed = fixed.split("
").join("");
|
||
|
var fileContents:String = File.getContent("Macros.tpl");
|
||
|
fileContents = fileContents.split("
").join("");
|
||
|
|
||
|
var template:Template = new Template(fileContents);
|
||
|
var result:String = template.execute(context);
|
||
|
var fileOutput:FileOutput = File.write("Macros.h", true);
|
||
|
fileOutput.writeString(warning);
|
||
|
fileOutput.writeString(fixed);
|
||
|
fileOutput.writeString(result);
|
||
|
fileOutput.close();
|
||
|
|
||
|
var fileContents:String = File.getContent("MacrosJumbo.tpl");
|
||
|
fileContents = fileContents.split("
").join("");
|
||
|
var template:Template = new Template(fileContents);
|
||
|
Reflect.setField(context, "LOCALS", jumboLocals);
|
||
|
var result:String = template.execute(context);
|
||
|
var fileOutput:FileOutput = File.write("MacrosJumbo.h", true);
|
||
|
fileOutput.writeString(warning);
|
||
|
fileOutput.writeString(result);
|
||
|
fileOutput.close();
|
||
|
|
||
|
|
||
|
|
||
|
var fileContents:String = File.getContent("DynamicImpl.tpl");
|
||
|
fileContents = fileContents.split("
").join("");
|
||
|
var template:Template = new Template(fileContents);
|
||
|
var result:String = template.execute(context);
|
||
|
var fileOutput:FileOutput = File.write("DynamicImpl.h", true);
|
||
|
fileOutput.writeString(warning);
|
||
|
fileOutput.writeString(result);
|
||
|
fileOutput.close();
|
||
|
|
||
|
}
|
||
|
|
||
|
public static function main() { new GenMacro(); }
|
||
|
}
|