old value support in chain binding
This commit is contained in:
@@ -215,12 +215,12 @@ class BindExt {
|
|||||||
if (first != null)
|
if (first != null)
|
||||||
Context.warning('${expr.toString()} is not full bindable. Can bind only "${first.e.toString()}".', expr.pos);
|
Context.warning('${expr.toString()} is not full bindable. Can bind only "${first.e.toString()}".', expr.pos);
|
||||||
|
|
||||||
return prepareChain(fields, macro listener, expr.pos, prefix);
|
return prepareChain(fields, macro listener, expr, prefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline static function listenerName(idx:Int, prefix) return '${prefix}listener$idx';
|
inline static function listenerName(idx:Int, prefix) return '${prefix}listener$idx';
|
||||||
|
|
||||||
static function prepareChain(fields:Array<FieldExpr>, listener:Expr, pos:Position, prefix = ""):Chain {
|
static function prepareChain(fields:Array<FieldExpr>, expr:Expr, listener:Expr, prefix = ""):Chain {
|
||||||
var res:Chain = { init:[], bind:[], unbind:[], expr:null, zeroName:null };
|
var res:Chain = { init:[], bind:[], unbind:[], expr:null, zeroName:null };
|
||||||
|
|
||||||
var prevListenerName = listenerName(0, prefix);
|
var prevListenerName = listenerName(0, prefix);
|
||||||
@@ -265,11 +265,12 @@ class BindExt {
|
|||||||
fieldListenerBody.push(macro if (n != null)
|
fieldListenerBody.push(macro if (n != null)
|
||||||
$ { BindMacros.bindingSignalProvider.getClassFieldBindExpr(macro n, prev.field, prevListenerNameExpr ) });
|
$ { BindMacros.bindingSignalProvider.getClassFieldBindExpr(macro n, prev.field, prevListenerNameExpr ) });
|
||||||
}
|
}
|
||||||
var callPrev = macro $prevListenerNameExpr($a { prev.params != null ? [] : [macro null, macro n != null ? n.$fieldName : null] } );
|
var callPrev = macro $prevListenerNameExpr($a { prev.params != null ? [] : [macro o != null ? o.$fieldName : null, macro n != null ? n.$fieldName : null] } );
|
||||||
fieldListenerBody.push(callPrev);
|
fieldListenerBody.push(callPrev);
|
||||||
|
|
||||||
if (field.params != null) {
|
if (field.params != null) {
|
||||||
fieldListenerBody.unshift(macro var n:Null<$type> = try $e catch (e:Dynamic) null );
|
fieldListenerBody.unshift(macro var n:Null<$type> = try $e catch (e:Dynamic) null );
|
||||||
|
fieldListenerBody.unshift(macro var o:Null<$type> = null );
|
||||||
|
|
||||||
fieldListener = macro function $listenerName ():Void $b { fieldListenerBody };
|
fieldListener = macro function $listenerName ():Void $b { fieldListenerBody };
|
||||||
} else {
|
} else {
|
||||||
@@ -289,13 +290,12 @@ class BindExt {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (zeroListener == null || zeroListener.f.bindable == false)
|
if (zeroListener == null || zeroListener.f.bindable == false)
|
||||||
throw new bindx.Error("Chain is not bindable.", pos);
|
throw new bindx.Error("Chain is not bindable.", expr.pos);
|
||||||
|
|
||||||
var zeroName = res.zeroName = zeroListener.f.e.toString();
|
var zeroName = res.zeroName = zeroListener.f.e.toString();
|
||||||
if (zeroName != "this")
|
if (zeroName != "this")
|
||||||
res.init.unshift(macro var $zeroName = $i{zeroName});
|
res.init.unshift(macro var $zeroName = $i{zeroName});
|
||||||
|
|
||||||
// TODO: local var
|
|
||||||
res.bind.push(BindMacros.bindingSignalProvider.getClassFieldBindExpr(macro $i{zeroName}, zeroListener.f.field, zeroListener.l ));
|
res.bind.push(BindMacros.bindingSignalProvider.getClassFieldBindExpr(macro $i{zeroName}, zeroListener.f.field, zeroListener.l ));
|
||||||
res.unbind.push(BindMacros.bindingSignalProvider.getClassFieldUnbindExpr(macro $i{zeroName}, zeroListener.f.field, zeroListener.l ));
|
res.unbind.push(BindMacros.bindingSignalProvider.getClassFieldUnbindExpr(macro $i{zeroName}, zeroListener.f.field, zeroListener.l ));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user