forked from LeenkxTeam/LNXSDK
		
	
		
			
				
	
	
		
			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(); }
 | 
						|
}
 |