Skip to content

Instantly share code, notes, and snippets.

@lucas-jones
Created January 5, 2015 16:04
Show Gist options
  • Save lucas-jones/e21df1c8eb4dcc6d5bc4 to your computer and use it in GitHub Desktop.
Save lucas-jones/e21df1c8eb4dcc6d5bc4 to your computer and use it in GitHub Desktop.
Haxe JSChannel Macro Idea
package ;
import haxe.macro.Context;
import haxe.macro.Expr.Field;
import haxe.macro.Printer;
import haxe.macro.*;
import haxe.macro.Expr;
using Lambda;
using haxe.macro.Tools;
class JSChannelMacro
{
macro public static function build():Array<Field>
{
var print:Printer = new Printer();
var fieldsList = Context.getBuildFields();
for (field in fieldsList)
{
switch(field.kind)
{
default:
case FFun(funcDatas):
for(meta in field.meta)
{
if(meta.name == ":jsFunction")
{
trace(field.name);
switch (field.kind)
{
default:
case FFun(f):
var functions = [ macro var arguments = { }];
for(argument in funcDatas.args)
{
functions.push(macro Reflect.setField(arguments, $v{argument.name}, $i{argument.name}));
}
functions.push(macro $i{"call"}($v{field.name}, arguments));
f.expr = macro $b {functions};
}
trace(print.printField(field));
}
}
}
}
return fieldsList;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment