diff --git a/haxe/ui/Toolkit.hx b/haxe/ui/Toolkit.hx index 9e8de0d6a..af34443c7 100644 --- a/haxe/ui/Toolkit.hx +++ b/haxe/ui/Toolkit.hx @@ -22,11 +22,11 @@ import haxe.ui.parsers.ui.ComponentParser; import haxe.ui.parsers.ui.LayoutInfo; import haxe.ui.parsers.ui.resolvers.AssetResourceResolver; import haxe.ui.parsers.ui.resolvers.ResourceResolver; -import haxe.ui.scripting.ConditionEvaluator; import haxe.ui.styles.CompositeStyleSheet; import haxe.ui.themes.ThemeManager; import haxe.ui.util.GenericConfig; import haxe.ui.util.Properties; +import haxe.ui.util.SimpleExpressionEvaluator; import haxe.ui.util.TypeConverter; import haxe.ui.util.Variant; @@ -205,7 +205,7 @@ class Toolkit { } private static function buildComponentFromInfo(c:ComponentInfo, callback:Component->Void):Component { - if (c.condition != null && new ConditionEvaluator().evaluate(c.condition) == false) { + if (c.condition != null && SimpleExpressionEvaluator.evalCondition(c.condition) == false) { return null; } diff --git a/haxe/ui/macros/ComponentMacros.hx b/haxe/ui/macros/ComponentMacros.hx index 3fe692350..830bf5e2d 100644 --- a/haxe/ui/macros/ComponentMacros.hx +++ b/haxe/ui/macros/ComponentMacros.hx @@ -13,8 +13,8 @@ import haxe.ui.parsers.ui.ComponentInfo; import haxe.ui.parsers.ui.ComponentParser; import haxe.ui.parsers.ui.LayoutInfo; import haxe.ui.parsers.ui.resolvers.FileResourceResolver; -import haxe.ui.scripting.ConditionEvaluator; import haxe.ui.util.ExpressionUtil; +import haxe.ui.util.SimpleExpressionEvaluator; import haxe.ui.util.StringUtil; import haxe.ui.util.TypeConverter; @@ -180,6 +180,9 @@ class ComponentMacros { for (child in c.children) { var componentId = "c" + n; var r = buildComponentFromInfo(builder, child, buildData, function(componentInfo:ComponentInfo, codeBuilder:CodeBuilder) { + if (componentInfo.condition != null && SimpleExpressionEvaluator.evalCondition(componentInfo.condition) == false) { + return; + } codeBuilder.add(macro $i{rootVarName}.addComponent($i{componentId})); for (scriptString in componentInfo.scriptlets) { fullScript += scriptString; @@ -498,7 +501,7 @@ class ComponentMacros { // returns next free id private static function buildComponentNode(builder:CodeBuilder, c:ComponentInfo, id:Int, parentId:Int, buildData:BuildData, recurseChildren:Bool = true) { - if (c.condition != null && new ConditionEvaluator().evaluate(c.condition) == false) { + if (c.condition != null && SimpleExpressionEvaluator.evalCondition(c.condition) == false) { return id; } diff --git a/haxe/ui/scripting/ConditionEvaluator.hx b/haxe/ui/scripting/ConditionEvaluator.hx deleted file mode 100644 index 70e29b1ef..000000000 --- a/haxe/ui/scripting/ConditionEvaluator.hx +++ /dev/null @@ -1,27 +0,0 @@ -package haxe.ui.scripting; - -class ConditionEvaluator { - private static var _parser:hscript.Parser; - private static var _interp:hscript.Interp; - - public function new() { - } - - public function evaluate(condition:String):Bool { - if (_parser == null) { - _parser = new hscript.Parser(); - } - if (_interp == null) { - _interp = new hscript.Interp(); - } - - _interp.variables.set("Backend", Backend); - _interp.variables.set("backend", Backend.id); - - var program = _parser.parseString(condition); - var r = _interp.execute(program); - - return r; - } - -} \ No newline at end of file diff --git a/haxe/ui/util/SimpleExpressionEvaluator.hx b/haxe/ui/util/SimpleExpressionEvaluator.hx index f4f6cc59b..c1b5f39d8 100644 --- a/haxe/ui/util/SimpleExpressionEvaluator.hx +++ b/haxe/ui/util/SimpleExpressionEvaluator.hx @@ -18,6 +18,13 @@ enum SimpleExpressionEvaluatorOperation { } class SimpleExpressionEvaluator { + public static function evalCondition(condition:String):Bool { + return eval(condition, { + Backend: Backend, + backend: Backend.id + }); + } + public static function eval(s:String, context:Dynamic = null):Dynamic { var result:Dynamic = null;