2016-03-28 9 views
1

Ich versuche, eine Klasse während Makro Zeit von einer Datei wie folgt formated zu bauen:Gebäude Satz von Eigenschaften für die Klasse von Textdatei mit Hilfe von Makros in haxe

myString;String 
myInt;Int 
myCustomClass;CustomClass 

Nun, ich bin nicht das Modul an Klassen hinzugefügt , also muss das Makro es auflösen.

Das ist mein Baumeister Makro:

class Builder { 
    macro public static function buildController(resourcePath:String):Array<Field> { 
     resourcePath = haxe.macro.Context.resolvePath(resourcePath); 
     var pos = haxe.macro.Context.currentPos(); 
     var fields = haxe.macro.Context.getBuildFields(); 

     var entries = sys.io.File.getContent(resourcePath).split("\n"); 

     for (e in entries) { 
      var data = e.split(";"); 
      var varname = data[0]; 
      var classname = data[1]; 
      var packname = []; 
      switch(haxe.macro.Context.getType(classname)) { 
       case TInst(t,_): packname = t.get().pack; 
       default: throw "Class not found"; 
      } 
      fields.push({ name : varname 
         , doc : null 
         , meta : [] 
         , access : [APrivate] 
         , kind : FVar(TPath({ pack : packname 
               , name : classname 
               , params : [] 
               , sub : null }) 
                , null) 
         , pos : pos }); 
     } 
     return fields; 
    } 
} 

Und wenn ich es wie folgt verwendet werden:

@:build(Builder.buildController("./data.txt")) 
class Main { 
    static public function main() {} 
} 

ich diesen Fehler:

/usr/lib/haxe/std/haxe/macro/Context.hx:249: characters 37-45 : Invalid field access : __s Builder.hx:17: characters 19-56 : Called from Main.hx:2: characters 2-7 : Called from Aborted

Wie ich Eigenschaften bauen kann ein Makro aus einer Textdatei?

Antwort

Verwandte Themen