private util methods

This commit is contained in:
Dima Granetchi
2014-12-06 22:13:24 +02:00
parent 243ab429d7
commit d2b218dd91
3 changed files with 11 additions and 12 deletions
+6 -6
View File
@@ -37,23 +37,23 @@ class Bind {
#if macro #if macro
public static function internalBind(field:Expr, listener:Expr, doBind:Bool):Expr { static function internalBind(field:Expr, listener:Expr, doBind:Bool):Expr {
var fieldData = warnCheckField(field); var fieldData = warnCheckField(field);
return if (doBind) BindMacros.bindingSignalProvider.getClassFieldBindExpr(fieldData.e, fieldData.field, listener); return if (doBind) BindMacros.bindingSignalProvider.getClassFieldBindExpr(fieldData.e, fieldData.field, listener);
else BindMacros.bindingSignalProvider.getClassFieldUnbindExpr(fieldData.e, fieldData.field, listener); else BindMacros.bindingSignalProvider.getClassFieldUnbindExpr(fieldData.e, fieldData.field, listener);
} }
public static function internalBindTo(field:Expr, target:Expr):Expr { static function internalBindTo(field:Expr, target:Expr):Expr {
var fieldData = warnCheckField(field); var fieldData = warnCheckField(field);
return BindMacros.bindingSignalProvider.getClassFieldBindToExpr(fieldData.e, fieldData.field, target); return BindMacros.bindingSignalProvider.getClassFieldBindToExpr(fieldData.e, fieldData.field, target);
} }
public static function internalNotify(field:Expr, ?oldValue:Expr, ?newValue:Expr):Expr { static function internalNotify(field:Expr, ?oldValue:Expr, ?newValue:Expr):Expr {
var fieldData = warnCheckField(field); var fieldData = warnCheckField(field);
return BindMacros.bindingSignalProvider.getClassFieldChangedExpr(fieldData.e, fieldData.field, oldValue, newValue); return BindMacros.bindingSignalProvider.getClassFieldChangedExpr(fieldData.e, fieldData.field, oldValue, newValue);
} }
public static function internalUnbindAll(object:ExprOf<IBindable>):Expr { static function internalUnbindAll(object:ExprOf<IBindable>):Expr {
var type = Context.typeof(object).follow(); var type = Context.typeof(object).follow();
if (!isBindable(type.getClass())) { if (!isBindable(type.getClass())) {
Context.error('\'${object.toString()}\' must be bindx.IBindable', object.pos); Context.error('\'${object.toString()}\' must be bindx.IBindable', object.pos);
@@ -74,7 +74,7 @@ class Bind {
return res; return res;
} }
public static function checkField(f:Expr):{e:Expr, field:ClassField, error:bindx.Error} { static function checkField(f:Expr):{e:Expr, field:ClassField, error:bindx.Error} {
var error:bindx.Error; var error:bindx.Error;
switch (f.expr) { switch (f.expr) {
case EField(e, field): case EField(e, field):
@@ -108,7 +108,7 @@ class Bind {
return {e:f, field:null, error:new bindx.Error('\'${f.toString()}\' is not bindable', f.pos)}; return {e:f, field:null, error:new bindx.Error('\'${f.toString()}\' is not bindable', f.pos)};
} }
public static function isBindable(classType:ClassType):Bool { static function isBindable(classType:ClassType):Bool {
var check = [classType]; var check = [classType];
while (check.length > 0) { while (check.length > 0) {
var t = check.shift(); var t = check.shift();
+4 -5
View File
@@ -29,6 +29,7 @@ typedef Chain = {
#end #end
@:access(bindx.BindMacros) @:access(bindx.BindMacros)
@:access(bindx.Bind)
class BindExt { class BindExt {
@:noUsing macro static public function expr<T>(expr:ExprOf<T>, listener:ExprOf<Null<T>->Null<T>->Void>):ExprOf<Void->Void> { @:noUsing macro static public function expr<T>(expr:ExprOf<T>, listener:ExprOf<Null<T>->Null<T>->Void>):ExprOf<Void->Void> {
@@ -51,7 +52,7 @@ class BindExt {
#if macro #if macro
public static function internalBindChain(expr:Expr, listener:Expr):Expr { static function internalBindChain(expr:Expr, listener:Expr):Expr {
var zeroListener = listenerName(0, ""); var zeroListener = listenerName(0, "");
var chain = null; var chain = null;
try { chain = warnPrepareChain(expr, macro $i{ zeroListener }); } catch (e:bindx.Error) e.contextError(); try { chain = warnPrepareChain(expr, macro $i{ zeroListener }); } catch (e:bindx.Error) e.contextError();
@@ -61,7 +62,7 @@ class BindExt {
)($listener); )($listener);
} }
public static function internalBindExpr(expr:Expr, listener:Expr):Expr { static function internalBindExpr(expr:Expr, listener:Expr):Expr {
var type = Context.typeof(expr).toComplexType(); var type = Context.typeof(expr).toComplexType();
var listenerNameExpr = macro listener; var listenerNameExpr = macro listener;
var fieldListenerName = "fieldListener"; var fieldListenerName = "fieldListener";
@@ -146,13 +147,12 @@ class BindExt {
var zeroListener = listenerName(0, ""); var zeroListener = listenerName(0, "");
var zeroValue = 'value0'; var zeroValue = 'value0';
chain.unbind.unshift(macro $i { zeroValue } = null);
var callListener = switch (type) { var callListener = switch (type) {
case macro : Void: macro if (!init) $i{zeroListener}(); case macro : Void: macro if (!init) $i{zeroListener}();
case _: macro if (!init) { var v:Null<$type> = null; try { v = $expr; } catch (e:Dynamic) { }; $i{zeroListener}($i{zeroValue}, $i{zeroValue} = v); }; case _: macro if (!init) { var v:Null<$type> = null; try { v = $expr; } catch (e:Dynamic) { }; $i{zeroListener}($i{zeroValue}, $i{zeroValue} = v); };
} }
chain.unbind.unshift(macro $i{zeroValue} = null);
var preInit = [ var preInit = [
(macro var init:Bool = true), (macro var init:Bool = true),
@@ -203,7 +203,6 @@ class BindExt {
} }
prevField = field; prevField = field;
} }
return fields; return fields;
} }
+1 -1
View File
@@ -6,7 +6,7 @@ import haxe.macro.Expr;
import haxe.macro.Type; import haxe.macro.Type;
interface IBindingSignalProvider { interface IBindingSignalProvider {
function getFieldDispatcher(field:Field, result:Array<Field>):Void; function getFieldDispatcher(field:Field, result:Array<Field>):Void;
function getFieldChangedExpr(field:Field, oldValue:Expr, newValue:Expr):Expr; function getFieldChangedExpr(field:Field, oldValue:Expr, newValue:Expr):Expr;