inline some methods, speedup
This commit is contained in:
+13
-10
@@ -37,23 +37,23 @@ class Bind {
|
|||||||
|
|
||||||
#if macro
|
#if macro
|
||||||
|
|
||||||
static function internalBind(field:Expr, listener:Expr, doBind:Bool):Expr {
|
static inline 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
static function internalBindTo(field:Expr, target:Expr):Expr {
|
static inline 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
static function internalNotify(field:Expr, ?oldValue:Expr, ?newValue:Expr):Expr {
|
static inline 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
static function internalUnbindAll(object:ExprOf<IBindable>):Expr {
|
static inline 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);
|
||||||
@@ -61,7 +61,7 @@ class Bind {
|
|||||||
return BindMacros.bindingSignalProvider.getUnbindAllExpr(object, type);
|
return BindMacros.bindingSignalProvider.getUnbindAllExpr(object, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
static function warnCheckField(field:Expr):{e:Expr, field:ClassField} {
|
static inline function warnCheckField(field:Expr):{e:Expr, field:ClassField} {
|
||||||
var res = null;
|
var res = null;
|
||||||
try {
|
try {
|
||||||
res = checkField(field);
|
res = checkField(field);
|
||||||
@@ -108,19 +108,22 @@ class Bind {
|
|||||||
return {e:f, field:null, error:new GenericError('\'${f.toString()}\' is not bindable', f.pos)};
|
return {e:f, field:null, error:new GenericError('\'${f.toString()}\' is not bindable', f.pos)};
|
||||||
}
|
}
|
||||||
|
|
||||||
static function isBindable(classType:ClassType):Bool {
|
static inline function isBindable(classType:ClassType):Bool {
|
||||||
var check = [classType];
|
var check = [classType];
|
||||||
while (check.length > 0) {
|
var res = false;
|
||||||
|
while (check.length > 0 && !res) {
|
||||||
var t = check.shift();
|
var t = check.shift();
|
||||||
while (t != null) {
|
while (t != null) {
|
||||||
if (t.module == "bindx.IBindable" && t.name == "IBindable")
|
if (t.module == "bindx.IBindable" && t.name == "IBindable") {
|
||||||
return true;
|
res = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
for (it in t.interfaces)
|
for (it in t.interfaces)
|
||||||
check.push(it.t.get());
|
check.push(it.t.get());
|
||||||
t = t.superClass != null ? t.superClass.t.get() : null;
|
t = t.superClass != null ? t.superClass.t.get() : null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return res;
|
||||||
}
|
}
|
||||||
#end
|
#end
|
||||||
}
|
}
|
||||||
@@ -52,7 +52,7 @@ class BindExt {
|
|||||||
|
|
||||||
#if macro
|
#if macro
|
||||||
|
|
||||||
static function internalBindChain(expr:Expr, listener:Expr):Expr {
|
static inline 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:GenericError) e.contextError();
|
try { chain = warnPrepareChain(expr, macro $i{ zeroListener }); } catch (e:GenericError) e.contextError();
|
||||||
|
|||||||
+14
-8
@@ -12,23 +12,29 @@ class MetaUtils {
|
|||||||
|
|
||||||
static public inline var BINDABLE_META = ":bindable";
|
static public inline var BINDABLE_META = ":bindable";
|
||||||
|
|
||||||
static public function findParam(meta:MetadataEntry, name:String):Expr {
|
static public inline function findParam(meta:MetadataEntry, name:String):Expr {
|
||||||
if (meta.params == null)
|
var res = null;
|
||||||
return null;
|
|
||||||
|
|
||||||
for (p in meta.params) {
|
if (meta.params != null) for (p in meta.params) {
|
||||||
switch (p.expr) {
|
switch (p.expr) {
|
||||||
case EBinop(OpAssign, e1, e2):
|
case EBinop(OpAssign, e1, e2):
|
||||||
if (e1.toString() == name) return {expr:e2.expr, pos:p.pos};
|
if (e1.toString() == name) res = {expr:e2.expr, pos:p.pos};
|
||||||
case _:
|
case _:
|
||||||
Context.warning('Bindable arguments syntax error. Supported syntax: (flag1=true, flag2=false)', p.pos);
|
Context.warning('Bindable arguments syntax error. Supported syntax: (flag1=true, flag2=false)', p.pos);
|
||||||
}
|
}
|
||||||
|
if (res != null) break;
|
||||||
}
|
}
|
||||||
return null;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static public inline function bindableMeta(meta:Metadata):MetadataEntry
|
static public inline function bindableMeta(meta:Metadata):MetadataEntry {
|
||||||
return meta.find(function (it) return it.name == BINDABLE_META);
|
var res = null;
|
||||||
|
for (m in meta) if (m.name == BINDABLE_META) {
|
||||||
|
res = m;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class FieldMetaUtils {
|
class FieldMetaUtils {
|
||||||
|
|||||||
Reference in New Issue
Block a user