From a6ff04fd1b9116a3df37db591849022c3e6c4b2c Mon Sep 17 00:00:00 2001 From: shmyga Date: Tue, 19 Nov 2019 21:53:33 +0300 Subject: [PATCH] [macro] TemplateMacro: move init to constructor --- demo/run.sh | 7 +++-- demo/src/demo/Demo.hx | 3 +- demo/src/demo/form/TestLayoutForm.hx | 3 -- demo/src/demo/popup/FontPopup.hx | 3 +- src/main/haxework/macro/MacroUtil.hx | 17 +++++++++++ src/main/haxework/macro/TemplateMacro.hx | 39 +++++++++--------------- 6 files changed, 40 insertions(+), 32 deletions(-) diff --git a/demo/run.sh b/demo/run.sh index 134002a..1281eed 100755 --- a/demo/run.sh +++ b/demo/run.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash +SDK_PATH=~/sdk echo "`pwd`/target" > ~/.macromedia/Flash_Player/#Security/FlashPlayerTrust/haxework_demo.cfg -. /opt/sdk/neko/2.2.0/activate -. /opt/sdk/haxe/3.4.7/activate -haxe build.hxml && flashplayerdebugger target/demo.swf & +. ${SDK_PATH}/neko/2.2.0/activate +. ${SDK_PATH}/haxe/3.4.7/activate +haxe build.hxml && ${SDK_PATH}/flashplayer/32/flashplayerdebugger target/demo.swf & tail -f ~/.macromedia/Flash_Player/Logs/flashlog.txt diff --git a/demo/src/demo/Demo.hx b/demo/src/demo/Demo.hx index 51a352c..92ec764 100644 --- a/demo/src/demo/Demo.hx +++ b/demo/src/demo/Demo.hx @@ -17,7 +17,8 @@ import haxework.view.group.VGroupView; @:view var switcher:FrameSwitcher; @:view var tabs:ButtonGroup; - private function init():Void { + public function new():Void { + super(); switcher.change("list"); } diff --git a/demo/src/demo/form/TestLayoutForm.hx b/demo/src/demo/form/TestLayoutForm.hx index 6ec72c3..53ff66d 100644 --- a/demo/src/demo/form/TestLayoutForm.hx +++ b/demo/src/demo/form/TestLayoutForm.hx @@ -10,9 +10,6 @@ import haxework.view.SpriteView; public function new() { super("test_layout"); - } - - public function init():Void { resize(); content.addEventListener(MouseEvent.CLICK, function(_) { resize(); diff --git a/demo/src/demo/popup/FontPopup.hx b/demo/src/demo/popup/FontPopup.hx index ca7a6a8..3077705 100644 --- a/demo/src/demo/popup/FontPopup.hx +++ b/demo/src/demo/popup/FontPopup.hx @@ -23,7 +23,8 @@ class FontLabelView extends LabelListItem { @:view var fonts:ListView; - private function init():Void { + private function new():Void { + super(); var values:Array = Font.enumerateFonts(true).map(function(font:Font) { return { name: font.fontName, diff --git a/src/main/haxework/macro/MacroUtil.hx b/src/main/haxework/macro/MacroUtil.hx index 780ebb8..4f29917 100644 --- a/src/main/haxework/macro/MacroUtil.hx +++ b/src/main/haxework/macro/MacroUtil.hx @@ -64,4 +64,21 @@ class MacroUtil { case _: null; } } + + public static function upgradeField(field:Field, expr:Expr, position:Int = 0):Field { + switch field.kind { + case FFun(f): + var fieldExpr = f.expr; + switch fieldExpr.expr { + case EBlock(exprs): + exprs.insert(position, expr); + fieldExpr = macro $b{exprs}; + case _: + fieldExpr = macro $b{[fieldExpr, expr]} + } + f.expr = fieldExpr; + case _: + } + return field; + } } diff --git a/src/main/haxework/macro/TemplateMacro.hx b/src/main/haxework/macro/TemplateMacro.hx index 98d794d..875c591 100644 --- a/src/main/haxework/macro/TemplateMacro.hx +++ b/src/main/haxework/macro/TemplateMacro.hx @@ -154,30 +154,22 @@ class TemplateMacro extends ClassTypeMacro { } } - private function buildConstructor(init:Bool, constructor:Field = null):Field { - var contstrExprs = []; - if (constructor != null) { - switch constructor.kind { - case FFun(f): contstrExprs.push(f.expr); - case _: + private function upgradeConstructor(constructor:Field = null):Field { + if (constructor == null) { + constructor = { + name: "new", + access: [Access.APublic], + pos: getPosition(), + kind: FieldType.FFun({ + args: [], + expr: macro super(), + params: [], + ret: null + }) } - } else { - contstrExprs.push(macro super()); } - contstrExprs.push(macro build()); - if (init) contstrExprs.push(macro init()); - - return { - name: "new", - access: [Access.APublic], - pos: getPosition(), - kind: FieldType.FFun({ - args: [], - expr: macro $b{contstrExprs}, - params: [], - ret: null - }) - }; + MacroUtil.upgradeField(constructor, macro build(), 1); + return constructor; } private static function findViewsBindings(fields:Array):Map { @@ -206,14 +198,13 @@ class TemplateMacro extends ClassTypeMacro { bindings = findViewsBindings(fields); var result:Array = fields.slice(0); var exprs:Array = []; - var init = Lambda.exists(result, function(f) return f.name == "init"); createElement("this", template, exprs); result.push(buildBuild(exprs)); var constructor = Lambda.find(result, function(f) return f.name == "new"); if (constructor != null) { result.remove(constructor); } - result.push(buildConstructor(init, constructor)); + result.push(upgradeConstructor(constructor)); if (Lambda.count(bindings) > 0) { var keys = Lambda.map({iterator: bindings.keys}, function(k) return '"${k}"').join(","); Context.error('Invalid @:view bindings: $keys', getPosition());