From 8e1785e52aa424441679d8bb09936dda959ff52c Mon Sep 17 00:00:00 2001 From: Tyler Gregg Date: Thu, 30 Jan 2025 16:58:08 -0800 Subject: [PATCH] Avoids using lambdas in MacroEvaluator hot paths. --- .../amazon/ion/impl/macro/MacroEvaluator.kt | 36 +++++++++---------- .../impl/macro/MacroEvaluatorAsIonReader.kt | 7 ++-- 2 files changed, 20 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/amazon/ion/impl/macro/MacroEvaluator.kt b/src/main/java/com/amazon/ion/impl/macro/MacroEvaluator.kt index a68e27264..f22d32a80 100644 --- a/src/main/java/com/amazon/ion/impl/macro/MacroEvaluator.kt +++ b/src/main/java/com/amazon/ion/impl/macro/MacroEvaluator.kt @@ -864,10 +864,9 @@ class MacroEvaluator { */ fun initExpansion(encodingExpressions: List) { session.reset() - containerStack.push { ci -> - ci.type = ContainerInfo.Type.TopLevel - ci.expansion = session.getExpander(ExpansionKind.Stream, encodingExpressions, 0, encodingExpressions.size, Environment.EMPTY) - } + val ci = containerStack.push { _ -> } + ci.type = ContainerInfo.Type.TopLevel + ci.expansion = session.getExpander(ExpansionKind.Stream, encodingExpressions, 0, encodingExpressions.size, Environment.EMPTY) } /** @@ -908,21 +907,20 @@ class MacroEvaluator { if (expression is DataModelContainer) { val currentContainer = containerStack.peek() val topExpansion = currentContainer.expansion.top() - containerStack.push { ci -> - ci.type = when (expression.type) { - IonType.LIST -> ContainerInfo.Type.List - IonType.SEXP -> ContainerInfo.Type.Sexp - IonType.STRUCT -> ContainerInfo.Type.Struct - else -> unreachable() - } - ci.expansion = session.getExpander( - expansionKind = ExpansionKind.Stream, - expressions = topExpansion.expressions, - startInclusive = expression.startInclusive, - endExclusive = expression.endExclusive, - environment = topExpansion.environment, - ) - } + val ci = containerStack.push { _ -> } + ci.type = when (expression.type) { + IonType.LIST -> ContainerInfo.Type.List + IonType.SEXP -> ContainerInfo.Type.Sexp + IonType.STRUCT -> ContainerInfo.Type.Struct + else -> unreachable() + } + ci.expansion = session.getExpander( + expansionKind = ExpansionKind.Stream, + expressions = topExpansion.expressions, + startInclusive = expression.startInclusive, + endExclusive = expression.endExclusive, + environment = topExpansion.environment, + ) currentExpr = null } else { throw IonException("Not positioned on a container.") diff --git a/src/main/java/com/amazon/ion/impl/macro/MacroEvaluatorAsIonReader.kt b/src/main/java/com/amazon/ion/impl/macro/MacroEvaluatorAsIonReader.kt index a946af2c8..41971118e 100644 --- a/src/main/java/com/amazon/ion/impl/macro/MacroEvaluatorAsIonReader.kt +++ b/src/main/java/com/amazon/ion/impl/macro/MacroEvaluatorAsIonReader.kt @@ -117,10 +117,9 @@ class MacroEvaluatorAsIonReader( val containerToStepInto = currentValueExpression evaluator.stepIn() - containerStack.push { - it.container = containerToStepInto as Expression.DataModelContainer - it.currentFieldName = null - } + val it = containerStack.push { _ -> } + it.container = containerToStepInto as Expression.DataModelContainer + it.currentFieldName = null currentFieldName = null currentValueExpression = null queuedFieldName = null