diff --git a/OpenRA.Game/FieldLoader.cs b/OpenRA.Game/FieldLoader.cs index 80dd389092..72d4333614 100644 --- a/OpenRA.Game/FieldLoader.cs +++ b/OpenRA.Game/FieldLoader.cs @@ -71,6 +71,11 @@ namespace OpenRA static readonly ConcurrentCache MemberHasTranslateAttribute = new ConcurrentCache(member => member.HasAttribute()); + static readonly ConcurrentCache BooleanExpressionCache = + new ConcurrentCache(expression => new BooleanExpression(expression)); + static readonly ConcurrentCache IntegerExpressionCache = + new ConcurrentCache(expression => new IntegerExpression(expression)); + static readonly object TranslationsLock = new object(); static Dictionary translations; @@ -408,7 +413,7 @@ namespace OpenRA { try { - return new BooleanExpression(value); + return BooleanExpressionCache[value]; } catch (InvalidDataException e) { @@ -424,7 +429,7 @@ namespace OpenRA { try { - return new IntegerExpression(value); + return IntegerExpressionCache[value]; } catch (InvalidDataException e) {