From ac38bdc82991011596c4771897e7a2cbee3f0ab4 Mon Sep 17 00:00:00 2001 From: Tyler Gregg Date: Thu, 16 Jan 2025 14:44:18 -0800 Subject: [PATCH] Uses the MacroEvaluator's argument indices IntArray as-is instead of allocating a new List. --- src/main/java/com/amazon/ion/impl/macro/Environment.kt | 9 ++++----- .../java/com/amazon/ion/impl/macro/MacroEvaluator.kt | 6 +++--- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/amazon/ion/impl/macro/Environment.kt b/src/main/java/com/amazon/ion/impl/macro/Environment.kt index d348612a1..fbc9ba3a2 100644 --- a/src/main/java/com/amazon/ion/impl/macro/Environment.kt +++ b/src/main/java/com/amazon/ion/impl/macro/Environment.kt @@ -16,11 +16,10 @@ package com.amazon.ion.impl.macro data class Environment private constructor( // Any variables found here have to be looked up in [parentEnvironment] val arguments: List, - // TODO: Replace with IntArray - val argumentIndices: List, + val argumentIndices: IntArray, val parentEnvironment: Environment?, ) { - fun createChild(arguments: List, argumentIndices: List) = Environment(arguments, argumentIndices, this) + fun createChild(arguments: List, argumentIndices: IntArray) = Environment(arguments, argumentIndices, this) override fun toString() = """ |Environment( @@ -33,8 +32,8 @@ data class Environment private constructor( companion object { @JvmStatic - val EMPTY = Environment(emptyList(), emptyList(), null) + val EMPTY = Environment(emptyList(), IntArray(0), null) @JvmStatic - fun create(arguments: List, argumentIndices: List) = Environment(arguments, argumentIndices, null) + fun create(arguments: List, argumentIndices: IntArray) = Environment(arguments, argumentIndices, null) } } 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 4550efc8e..2f6249a1a 100644 --- a/src/main/java/com/amazon/ion/impl/macro/MacroEvaluator.kt +++ b/src/main/java/com/amazon/ion/impl/macro/MacroEvaluator.kt @@ -906,10 +906,10 @@ private fun calculateArgumentIndices( encodingExpressions: List, argsStartInclusive: Int, argsEndExclusive: Int -): List { +): IntArray { // TODO: For TDL macro invocations, see if we can calculate this during the "compile" step. var numArgs = 0 - val argsIndices = IntArray(macro.signature.size) + val argsIndices = IntArray(macro.signature.size) // TODO performance: pool these var currentArgIndex = argsStartInclusive for (p in macro.signature) { @@ -936,5 +936,5 @@ private fun calculateArgumentIndices( if (numArgs > macro.signature.size) { throw IonException("Too many arguments. Expected ${macro.signature.size}, but found $numArgs") } - return argsIndices.toList() + return argsIndices }