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