bindx_log define set warning level

This commit is contained in:
Dima Granetchi
2014-11-27 22:56:47 +02:00
parent 648c34b3b1
commit c19ad118c7
2 changed files with 32 additions and 17 deletions
+14 -17
View File
@@ -56,11 +56,9 @@ class BindExt {
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();
var res = macro (function ($zeroListener):Void->Void return macro (function ($zeroListener):Void->Void
$b { chain.init.concat(chain.bind).concat([macro return function ():Void $b { chain.unbind }]) } $b { chain.init.concat(chain.bind).concat([macro return function ():Void $b { chain.unbind }]) }
)($listener); )($listener);
trace(new Printer().printExpr(res));
return res;
} }
public static function internalBindExpr(expr:Expr, listener:Expr):Expr { public static function internalBindExpr(expr:Expr, listener:Expr):Expr {
@@ -101,7 +99,7 @@ class BindExt {
try { try {
c = warnPrepareChain(expr, macro $i { zeroListener }, pre, true); c = warnPrepareChain(expr, macro $i { zeroListener }, pre, true);
} catch (e:bindx.Error) { } catch (e:bindx.Error) {
//Context.warning('${start.toString()} is not bindable.', e.pos); Warn.w('${expr.toString()} is not bindable.', e.pos, WarnPriority.ALL);
} }
if (c != null) { if (c != null) {
var key = c.expr.toString(); var key = c.expr.toString();
@@ -109,9 +107,6 @@ class BindExt {
var prebind = macro var $zeroListener = ${ecall ? methodListenerNameExpr : fieldListenerNameExpr}; var prebind = macro var $zeroListener = ${ecall ? methodListenerNameExpr : fieldListenerNameExpr};
binded.set(key, {prebind:prebind, c:c}); binded.set(key, {prebind:prebind, c:c});
} }
//else {
//Context.warning("skip second bind " + key, c.expr.pos);
//}
} }
} }
expr.iter(findChain); expr.iter(findChain);
@@ -138,7 +133,7 @@ class BindExt {
chain.bind = chain.bind.concat(c.bind); chain.bind = chain.bind.concat(c.bind);
chain.unbind = chain.unbind.concat(c.unbind); chain.unbind = chain.unbind.concat(c.unbind);
} }
Context.warning('Bind \'${msg.join("', '")}\'', expr.pos); Warn.w('Bind \'${msg.join("', '")}\'', expr.pos, WarnPriority.INFO);
var zeroListener = listenerName(0, ""); var zeroListener = listenerName(0, "");
var zeroValue = 'value0'; var zeroValue = 'value0';
@@ -150,19 +145,21 @@ class BindExt {
chain.unbind.unshift(macro $i{zeroValue} = null); chain.unbind.unshift(macro $i{zeroValue} = null);
var init = [ var preInit = [
(macro var init:Bool = true),
macro var $zeroValue:Null<$type> = null
];
var postInit = [
macro function $fieldListenerName(?from:Dynamic, ?to:Dynamic) $callListener, macro function $fieldListenerName(?from:Dynamic, ?to:Dynamic) $callListener,
macro function $methodListenerName() $callListener macro function $methodListenerName() $callListener
]; ];
init = [(macro var init:Bool = true), macro var $zeroValue:Null<$type> = null].concat(chain.init).concat(init).concat(chain.bind); var result = [macro init = false, macro $i{methodListenerName}(), macro return function ():Void $b { chain.unbind }];
var res = macro (function ($zeroListener):Void->Void return macro (function ($zeroListener):Void->Void
$b { init.concat([macro init = false, macro $i{methodListenerName}(), macro return function ():Void $b { chain.unbind }]) } $b { preInit.concat(chain.init).concat(postInit).concat(chain.bind).concat(result) }
)($listener); )($listener);
trace(new Printer().printExpr(res));
return res;
} }
static function checkFields(expr:Expr):Array<FieldExpr> { static function checkFields(expr:Expr):Array<FieldExpr> {
@@ -197,7 +194,7 @@ class BindExt {
} }
prevField = field; prevField = field;
} }
//trace(expr.toString() + " " + [for (f in fields) f.bindable]);
return fields; return fields;
} }
@@ -226,7 +223,7 @@ class BindExt {
return null; return null;
} }
if (first != null) if (first != null)
Context.warning('${expr.toString()} is not full bindable. Can bind only "${first.e.toString()}".', expr.pos); Warn.w('${expr.toString()} is not full bindable. Can bind only "${first.e.toString()}".', expr.pos, WarnPriority.INFO);
return prepareChain(fields, macro listener, expr, prefix); return prepareChain(fields, macro listener, expr, prefix);
} }
+18
View File
@@ -3,6 +3,24 @@ package bindx;
import haxe.macro.Context; import haxe.macro.Context;
import haxe.macro.Expr.Position; import haxe.macro.Expr.Position;
@:enum abstract WarnPriority(Int) to Int from Int {
var ALL = 2;
var INFO = 1;
var LOW = 0;
}
class Warn {
static var level:WarnPriority = null;
public static function w(msg:String, pos:Position, level:WarnPriority) {
if (Warn.level == null) {
Warn.level = Context.defined("bindx_log") ? Std.parseInt(Context.definedValue("bindx_log")) : LOW;
}
if ((Warn.level : Int) >= (level : Int))
Context.warning(msg, pos);
}
}
class FatalError extends Error {} class FatalError extends Error {}
class Error { class Error {