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(); } | ||
|  | } |