inline some methods, speedup

This commit is contained in:
Dima Granetchi
2014-12-08 21:29:01 +02:00
parent a7968c65af
commit e571f8e364
4 changed files with 31 additions and 20 deletions
+13 -10
View File
@@ -37,23 +37,23 @@ class Bind {
#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);
return if (doBind) BindMacros.bindingSignalProvider.getClassFieldBindExpr(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);
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);
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();
if (!isBindable(type.getClass())) {
Context.error('\'${object.toString()}\' must be bindx.IBindable', object.pos);
@@ -61,7 +61,7 @@ class Bind {
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;
try {
res = checkField(field);
@@ -108,19 +108,22 @@ class Bind {
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];
while (check.length > 0) {
var res = false;
while (check.length > 0 && !res) {
var t = check.shift();
while (t != null) {
if (t.module == "bindx.IBindable" && t.name == "IBindable")
return true;
if (t.module == "bindx.IBindable" && t.name == "IBindable") {
res = true;
break;
}
for (it in t.interfaces)
check.push(it.t.get());
t = t.superClass != null ? t.superClass.t.get() : null;
}
}
return false;
return res;
}
#end
}
+1 -1
View File
@@ -52,7 +52,7 @@ class BindExt {
#if macro
static function internalBindChain(expr:Expr, listener:Expr):Expr {
static inline function internalBindChain(expr:Expr, listener:Expr):Expr {
var zeroListener = listenerName(0, "");
var chain = null;
try { chain = warnPrepareChain(expr, macro $i{ zeroListener }); } catch (e:GenericError) e.contextError();
+14 -8
View File
@@ -12,23 +12,29 @@ class MetaUtils {
static public inline var BINDABLE_META = ":bindable";
static public function findParam(meta:MetadataEntry, name:String):Expr {
if (meta.params == null)
return null;
static public inline function findParam(meta:MetadataEntry, name:String):Expr {
var res = null;
for (p in meta.params) {
if (meta.params != null) for (p in meta.params) {
switch (p.expr) {
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 _:
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
return meta.find(function (it) return it.name == BINDABLE_META);
static public inline function bindableMeta(meta:Metadata):MetadataEntry {
var res = null;
for (m in meta) if (m.name == BINDABLE_META) {
res = m;
break;
}
return res;
}
}
class FieldMetaUtils {
+3 -1
View File
@@ -5,4 +5,6 @@
--interp
-lib buddy
-D reporter=buddy.reporting.TravisHxReporter
-D console_log
-D console_log
--times
-D macro_times