Skip to content

Instantly share code, notes, and snippets.

@whacked
Forked from devboy/ComponentMacro.hx
Created October 14, 2013 20:40

Revisions

  1. @devboy devboy revised this gist Dec 20, 2011. 2 changed files with 35 additions and 6 deletions.
    20 changes: 16 additions & 4 deletions ComponentMacro.hx
    Original file line number Diff line number Diff line change
    @@ -13,11 +13,23 @@ class ComponentMacro
    public static function build(): Array<Field>
    {
    var pos = haxe.macro.Context.currentPos();
    var mk = function( expr ) return {expr: expr, pos: pos};
    var fields = haxe.macro.Context.getBuildFields();
    Lib.println( fields );
    var tint = TPath({ pack : [], name : "Int", params : [], sub : null });
    fields.push( { name : "id", doc : null, meta : [], access : [APublic], kind : FVar(tint, null), pos : pos });
    fields.push( { name : "ID", doc : null, meta : [], access : [AStatic], kind : FVar(tint, null), pos : pos });
    return fields;
    fields.push( { name : "ID", doc : null, meta : [], access : [AStatic, APublic], kind : FVar(tint, {expr: EConst(CInt(Std.string(idCount))), pos: pos}) , pos: pos });
    fields.push(
    {
    name: "id",
    doc: null,
    meta:[],
    access: [APublic],
    kind: FFun(
    {
    ret: tint, params: [], args: [], expr: mk( EReturn( mk( EConst(CInt(Std.string(idCount))))))
    } ),
    pos: pos
    } );
    idCount++;
    return fields;
    }
    }
    21 changes: 19 additions & 2 deletions Main.hx
    Original file line number Diff line number Diff line change
    @@ -9,16 +9,33 @@ class Main
    {
    public static function main()
    {
    Lib.println( ComponentA.ID );
    Lib.println( ComponentA.ID ); //0
    Lib.println( new ComponentA().id() ); //0
    Lib.println( new ComponentA().id() ); //0
    Lib.println( ComponentB.ID ); //1
    Lib.println( new ComponentB().id() ); //1
    Lib.println( new ComponentB().id() ); //1
    }
    }

    @:autoBuild( org.devboy.hxTask.ComponentMacro.build() )
    interface Component
    {
    var id:Int;
    function id():Int;
    }

    class ComponentA implements Component
    {
    public function new()
    {

    }
    }

    class ComponentB implements Component
    {
    public function new()
    {

    }
    }
  2. @devboy devboy created this gist Dec 20, 2011.
    23 changes: 23 additions & 0 deletions ComponentMacro.hx
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,23 @@
    package org.devboy.hxTask;

    import neko.Lib;
    import haxe.macro.Context;
    import haxe.macro.Expr;
    import haxe.macro.Type;

    class ComponentMacro
    {
    private static var idCount = 0;

    @:macro
    public static function build(): Array<Field>
    {
    var pos = haxe.macro.Context.currentPos();
    var fields = haxe.macro.Context.getBuildFields();
    Lib.println( fields );
    var tint = TPath({ pack : [], name : "Int", params : [], sub : null });
    fields.push( { name : "id", doc : null, meta : [], access : [APublic], kind : FVar(tint, null), pos : pos });
    fields.push( { name : "ID", doc : null, meta : [], access : [AStatic], kind : FVar(tint, null), pos : pos });
    return fields;
    }
    }
    24 changes: 24 additions & 0 deletions Main.hx
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,24 @@
    package org.devboy.hxTask;

    import neko.Lib;
    import haxe.macro.Expr;
    import haxe.macro.Context;
    import org.devboy.hxTask.ComponentMacro;

    class Main
    {
    public static function main()
    {
    Lib.println( ComponentA.ID );
    }
    }

    @:autoBuild( org.devboy.hxTask.ComponentMacro.build() )
    interface Component
    {
    var id:Int;
    }

    class ComponentA implements Component
    {
    }