This is an automated email from the ASF dual-hosted git repository.

jadams-tresys pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/daffodil.git


The following commit(s) were added to refs/heads/main by this push:
     new 050d47e11 Several small changes attempting to improve unparse 
performance
050d47e11 is described below

commit 050d47e1175f42fd6dc0fb670efffd5910a0af2f
Author: Josh Adams <[email protected]>
AuthorDate: Tue Jun 2 09:10:07 2026 -0400

    Several small changes attempting to improve unparse performance
    
    - Avoid calling .toList.toVector
    - Remove unnecessary Maybe
    - Avoid frequent push/pop operations
    - Remove unused default parameter
    - Inline unparse1 function
    - Use string interpolation instead of .format inside VariableMap
    - Change all runtimeDependencies to vals of Array
---
 .../runtime1/processors/EncodingRuntimeData.scala  |  2 +-
 .../runtime1/processors/EvBinaryFloat.scala        |  2 +-
 .../daffodil/runtime1/processors/EvByteOrder.scala |  6 ++---
 .../runtime1/processors/EvCalendarLanguage.scala   |  6 ++---
 .../runtime1/processors/EvDelimiters.scala         |  4 ++--
 .../daffodil/runtime1/processors/EvElement.scala   | 18 +++++++-------
 .../daffodil/runtime1/processors/EvEncoding.scala  |  6 ++---
 .../runtime1/processors/EvEscapeSchemes.scala      | 17 ++++++-------
 .../daffodil/runtime1/processors/EvFieldDFA.scala  |  2 +-
 .../runtime1/processors/EvTextNumber.scala         | 14 +++++------
 .../daffodil/runtime1/processors/Evaluatable.scala |  6 ++---
 .../runtime1/processors/PackedBinaryTraits.scala   |  4 ++--
 .../runtime1/processors/ProcessorBases.scala       |  2 +-
 .../runtime1/processors/VariableMap1.scala         | 28 +++++++---------------
 .../processors/parsers/AssertPatternParsers.scala  |  2 +-
 .../processors/parsers/BinaryBooleanParsers.scala  |  4 ++--
 .../processors/parsers/BinaryNumberParsers.scala   |  8 +++----
 .../processors/parsers/BlobLengthParsers.scala     |  2 +-
 .../parsers/ConvertTextStandardNumberParser.scala  |  4 ++--
 .../processors/parsers/DelimitedParsers.scala      |  2 +-
 .../processors/parsers/DelimiterParsers.scala      |  2 +-
 .../processors/parsers/ElementCombinator1.scala    |  2 +-
 .../processors/parsers/ElementKindParsers.scala    | 10 ++++----
 .../parsers/ExpressionEvaluatingParsers.scala      |  6 ++---
 .../processors/parsers/FramingParsers.scala        |  4 ++--
 .../parsers/HexBinaryLengthParsers.scala           |  4 ++--
 .../parsers/HiddenGroupCombinatorParser.scala      |  2 +-
 .../parsers/InitiatedContentParsers.scala          |  8 +++----
 .../parsers/NilEmptyCombinatorParsers.scala        |  2 +-
 .../runtime1/processors/parsers/NilParsers.scala   |  2 +-
 .../parsers/NonBaseTenTextNumberParser.scala       |  2 +-
 .../runtime1/processors/parsers/Parser.scala       | 10 ++++----
 .../processors/parsers/PrimitivesDateTime1.scala   |  4 ++--
 .../processors/parsers/RepTypeParsers.scala        |  2 +-
 .../parsers/SeparatedSequenceParsers.scala         |  4 ++--
 .../processors/parsers/SequenceChildBases.scala    |  4 ++--
 .../parsers/SpecifiedLengthParsers.scala           | 10 ++++----
 .../processors/parsers/StringLengthParsers.scala   |  2 +-
 .../processors/parsers/TextBooleanParser.scala     |  2 +-
 .../parsers/UnseparatedSequenceParsers.scala       |  4 ++--
 .../processors/parsers/ZonedTextParsers.scala      |  4 ++--
 .../runtime1/processors/unparsers/UState.scala     | 20 ++++++++--------
 .../runtime1/processors/unparsers/Unparser.scala   | 10 ++++----
 .../daffodil/unparsers/runtime1/BCDUnparsers.scala |  8 +++----
 .../runtime1/BinaryBooleanUnparsers.scala          |  4 ++--
 .../unparsers/runtime1/BinaryNumberUnparsers.scala | 16 ++++++-------
 .../unparsers/runtime1/BlobLengthUnparser.scala    |  2 +-
 .../runtime1/ChoiceAndOtherVariousUnparsers.scala  | 10 ++++----
 .../runtime1/ConvertBinaryCalendarUnparser.scala   |  2 +-
 .../ConvertNonBaseTenTextNumberUnparser.scala      |  2 +-
 .../runtime1/ConvertTextBooleanUnparser.scala      |  2 +-
 .../runtime1/ConvertTextCalendarUnparser.scala     |  2 +-
 .../ConvertTextStandardNumberUnparser.scala        |  4 ++--
 .../runtime1/ConvertZonedNumberUnparser.scala      |  4 ++--
 .../unparsers/runtime1/DelimitedUnparsers.scala    |  2 +-
 .../unparsers/runtime1/DelimiterUnparsers.scala    |  2 +-
 .../unparsers/runtime1/ElementUnparser.scala       | 18 +++++++-------
 .../runtime1/ExpressionEvaluatingUnparsers.scala   |  6 ++---
 .../unparsers/runtime1/FramingUnparsers.scala      |  4 ++--
 .../runtime1/HexBinaryLengthUnparser.scala         |  2 +-
 .../runtime1/HiddenGroupCombinatorUnparser.scala   |  2 +-
 .../runtime1/IBM4690PackedDecimalUnparsers.scala   |  8 +++----
 .../daffodil/unparsers/runtime1/NadaUnparser.scala |  2 +-
 .../runtime1/NilEmptyCombinatorUnparsers.scala     |  4 ++--
 .../daffodil/unparsers/runtime1/NilUnparsers.scala |  2 +-
 .../runtime1/PackedBinaryUnparserTraits.scala      |  2 +-
 .../runtime1/PackedDecimalUnparsers.scala          |  8 +++----
 .../unparsers/runtime1/RepTypeUnparsers.scala      |  2 +-
 .../runtime1/SeparatedSequenceUnparsers.scala      |  2 +-
 .../runtime1/SequenceChildUnparsers.scala          |  4 ++--
 .../unparsers/runtime1/SpecifiedLength2.scala      | 18 +++++++-------
 .../runtime1/SpecifiedLengthUnparsers.scala        |  4 ++--
 .../unparsers/runtime1/StreamSplitterMixin.scala   |  2 +-
 .../unparsers/runtime1/StringLengthUnparsers.scala |  6 ++---
 .../runtime1/StringLiteralForUnparser.scala        |  2 +-
 .../runtime1/SuppressableSeparatorUnparser.scala   |  2 +-
 .../runtime1/UnseparatedSequenceUnparsers.scala    |  4 ++--
 77 files changed, 206 insertions(+), 217 deletions(-)

diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EncodingRuntimeData.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EncodingRuntimeData.scala
index 8e219abea..15e0aef01 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EncodingRuntimeData.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EncodingRuntimeData.scala
@@ -122,7 +122,7 @@ final class EncodingRuntimeData(
   with ImplementsThrowsSDE
   with Serializable {
 
-  def runtimeDependencies = Vector(charsetEv)
+  val runtimeDependencies = Array[Evaluatable[AnyRef]](charsetEv)
 
   def getDecoderInfo(state: ParseOrUnparseState) = {
     val cs = charsetEv.evaluate(state)
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvBinaryFloat.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvBinaryFloat.scala
index 1ab993692..2b1d3a056 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvBinaryFloat.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvBinaryFloat.scala
@@ -24,6 +24,6 @@ class BinaryFloatRepEv(expr: CompiledExpression[String], eci: 
DPathElementCompil
   extends EvaluatableConvertedExpression[String, BinaryFloatRep](expr, 
BinaryFloatRep, eci)
   with InfosetCachedEvaluatable[BinaryFloatRep] {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
 }
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvByteOrder.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvByteOrder.scala
index e372887fa..919e3cf9e 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvByteOrder.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvByteOrder.scala
@@ -28,7 +28,7 @@ import org.apache.daffodil.runtime1.dsom.*
 class ByteOrderEv(override val expr: CompiledExpression[String], eci: 
DPathElementCompileInfo)
   extends EvaluatableConvertedExpression[String, ByteOrder](expr, ByteOrder, 
eci)
   with InfosetCachedEvaluatable[ByteOrder] {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
 }
 
@@ -48,7 +48,7 @@ class CheckByteAndBitOrderEv(
 ) extends Evaluatable[Ok](t)
   with InfosetCachedEvaluatable[Ok] { // can't use unit here, not <: AnyRef
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override final protected def compute(state: ParseOrUnparseState): Ok = {
     t match {
@@ -78,7 +78,7 @@ class CheckBitOrderAndCharsetEv(t: DPathCompileInfo, 
bitOrder: BitOrder, charset
   extends Evaluatable[Ok](t)
   with InfosetCachedEvaluatable[Ok] { // can't use unit here, not <: AnyRef
 
-  override def runtimeDependencies = Vector(charsetEv)
+  override val runtimeDependencies = Array(charsetEv)
 
   override final protected def compute(state: ParseOrUnparseState): Ok = {
     val bitsCharset = charsetEv.evaluate(state)
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvCalendarLanguage.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvCalendarLanguage.scala
index fd17beb55..7cffb2e78 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvCalendarLanguage.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvCalendarLanguage.scala
@@ -58,7 +58,7 @@ class CalendarLanguageEv(
     eci
   )
   with InfosetCachedEvaluatable[ULocale] {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 }
 
 class CalendarEv(
@@ -71,7 +71,7 @@ class CalendarEv(
 ) extends Evaluatable[Calendar](eci)
   with InfosetCachedEvaluatable[Calendar] {
 
-  override def runtimeDependencies = Seq(localeEv)
+  override val runtimeDependencies = Array(localeEv)
 
   override def compute(state: ParseOrUnparseState) = {
     // Used to configure the dataFormatter
@@ -107,7 +107,7 @@ class DateTimeFormatterEv(
 ) extends Evaluatable[ThreadSafePool[SimpleDateFormat]](eci)
   with InfosetCachedEvaluatable[ThreadSafePool[SimpleDateFormat]] {
 
-  override def runtimeDependencies = Seq(localeEv)
+  override val runtimeDependencies = Array(localeEv)
 
   override def compute(state: ParseOrUnparseState) = {
     val calendar = calendarEv.evaluate(state)
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvDelimiters.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvDelimiters.scala
index c2fcab594..3e9060411 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvDelimiters.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvDelimiters.scala
@@ -60,7 +60,7 @@ abstract class DelimiterParseEv(
   with InfosetCachedEvaluatable[Array[DFADelimiter]]
   with DelimiterEvMixin[Array[DFADelimiter]] {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override protected def compute(state: ParseOrUnparseState): 
Array[DFADelimiter] = {
     if (state.isInstanceOf[UState]) {
@@ -85,7 +85,7 @@ abstract class DelimiterUnparseEv(
   with InfosetCachedEvaluatable[Array[DFADelimiter]]
   with DelimiterEvMixin[Array[DFADelimiter]] {
 
-  override def runtimeDependencies = Seq(outputNewLine)
+  override val runtimeDependencies = Array(outputNewLine)
 
   override protected def compute(state: ParseOrUnparseState): 
Array[DFADelimiter] = {
     if (state.isInstanceOf[PState]) {
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvElement.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvElement.scala
index b770ab758..50a07a7e5 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvElement.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvElement.scala
@@ -36,7 +36,7 @@ class ExplicitLengthEv(expr: CompiledExpression[JLong], ci: 
DPathCompileInfo)
   extends EvaluatableExpression[JLong](expr, ci)
   with LengthEv
   with InfosetCachedEvaluatable[JLong] {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   /**
    * Length is special. For the dfdl:length property, when it's an expression
@@ -61,7 +61,7 @@ class ImplicitLengthEv(lengthValue: Long, ci: 
DPathElementCompileInfo)
   with LengthEv
   with NoCacheEvaluatable[JLong] {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   private val jLength = JLong.valueOf(lengthValue)
 
@@ -161,7 +161,7 @@ class LengthInBitsEv(
   ci: DPathCompileInfo
 ) extends LengthInBitsEvBase(ci, lengthUnits, lengthKind) {
 
-  override def runtimeDependencies = maybeCharsetEv.toList :+ lengthEv
+  override val runtimeDependencies = Array(lengthEv) ++ maybeCharsetEv.toList
 
   override protected def lengthInLengthUnits(state: ParseOrUnparseState) =
     lengthEv.evaluate(state).longValue()
@@ -183,7 +183,7 @@ class MinLengthInBitsEv(
   ci: DPathCompileInfo
 ) extends LengthInBitsEvBase(ci, lengthUnits, lengthKind) {
 
-  override def runtimeDependencies = maybeCharsetEv.toList
+  override val runtimeDependencies = maybeCharsetEv.toList.toArray
 
   override protected def lengthInLengthUnits(state: ParseOrUnparseState) = 
minLen
 }
@@ -206,7 +206,7 @@ class UnparseTargetLengthInBitsEv(
 ) extends Evaluatable[MaybeJULong](ci)
   with InfosetCachedEvaluatable[MaybeJULong] {
 
-  override def runtimeDependencies = Vector(this.lengthInBitsEv, 
this.minLengthInBitsEv)
+  override val runtimeDependencies = Array(this.lengthInBitsEv, 
this.minLengthInBitsEv)
 
   /**
    * Note: use of MaybeJULong type. New Maybe type added which can be stored in
@@ -242,7 +242,7 @@ class UnparseTargetLengthInCharactersEv(
 ) extends Evaluatable[MaybeJULong](ci)
   with InfosetCachedEvaluatable[MaybeJULong] {
 
-  override def runtimeDependencies = Vector(this.lengthEv, charsetEv)
+  override val runtimeDependencies = Array(this.lengthEv, charsetEv)
 
   /**
    * Note: use of MaybeJULong type. New Maybe type added which can be stored in
@@ -268,17 +268,17 @@ class UnparseTargetLengthInCharactersEv(
 class OccursCountEv(expr: CompiledExpression[JLong], ci: 
DPathElementCompileInfo)
   extends EvaluatableExpression[JLong](expr, ci)
   with InfosetCachedEvaluatable[JLong] {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 }
 
 class OutputNewLineEv(expr: CompiledExpression[String], ci: DPathCompileInfo)
   extends EvaluatableConvertedExpression[String, String](expr, 
OutputNewLineCooker, ci)
   with InfosetCachedEvaluatable[String] {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 }
 
 class ChoiceDispatchKeyEv(expr: CompiledExpression[String], ci: 
DPathCompileInfo)
   extends EvaluatableConvertedExpression[String, String](expr, 
ChoiceDispatchKeyCooker, ci)
   with InfosetCachedEvaluatable[String] {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 }
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvEncoding.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvEncoding.scala
index b850c4d27..2d366dfc7 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvEncoding.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvEncoding.scala
@@ -58,7 +58,7 @@ abstract class EncodingEvBase(
     tci
   )
   with InfosetCachedEvaluatable[String] {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override protected def compute(state: ParseOrUnparseState): String = {
     // compute via the cooker first
@@ -85,7 +85,7 @@ abstract class CharsetEvBase(encodingEv: EncodingEvBase, tci: 
DPathCompileInfo)
   extends Evaluatable[BitsCharset](tci)
   with InfosetCachedEvaluatable[BitsCharset] {
 
-  override def runtimeDependencies = Seq(encodingEv)
+  override val runtimeDependencies = Array(encodingEv)
 
   private def checkCharset(state: ParseOrUnparseState, bitsCharset: 
BitsCharset): Unit = {
     if (bitsCharset.bitWidthOfACodeUnit != 8) {
@@ -120,7 +120,7 @@ class FillByteEv(fillByteRaw: String, charsetEv: CharsetEv, 
tci: DPathCompileInf
   extends Evaluatable[Integer](tci)
   with InfosetCachedEvaluatable[Integer] {
 
-  override def runtimeDependencies = Seq(charsetEv)
+  override val runtimeDependencies = Array(charsetEv)
 
   private val maybeSingleRawByteValue: MaybeInt = {
     val RawByte = """\%\#r([0-9a-fA-F]{2})\;""".r
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvEscapeSchemes.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvEscapeSchemes.scala
index 4aab38cf2..9e22fc57e 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvEscapeSchemes.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvEscapeSchemes.scala
@@ -33,13 +33,13 @@ import 
org.apache.daffodil.runtime1.processors.unparsers.UState
 class EscapeCharEv(expr: CompiledExpression[String], ci: DPathCompileInfo)
   extends EvaluatableConvertedExpression[String, String](expr, 
EscapeCharacterCooker, ci)
   with InfosetCachedEvaluatable[String] {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 }
 
 class EscapeEscapeCharEv(expr: CompiledExpression[String], ci: 
DPathCompileInfo)
   extends EvaluatableConvertedExpression[String, String](expr, 
EscapeEscapeCharacterCooker, ci)
   with InfosetCachedEvaluatable[String] {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 }
 class ExtraEscapedCharsEv(expr: CompiledExpression[String], ci: 
DPathCompileInfo)
   extends EvaluatableConvertedExpression[String, Seq[String]](
@@ -48,7 +48,7 @@ class ExtraEscapedCharsEv(expr: CompiledExpression[String], 
ci: DPathCompileInfo
     ci
   )
   with InfosetCachedEvaluatable[Seq[String]] {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 }
 
 trait EscapeSchemeCommonEv {
@@ -103,7 +103,7 @@ class EscapeSchemeCharParseEv(
   ci: DPathCompileInfo
 ) extends EscapeSchemeParseEv(ci) {
 
-  override def runtimeDependencies = Vector(escapeChar) ++ 
optEscapeEscapeChar.toList
+  override val runtimeDependencies = Array(escapeChar) ++ 
optEscapeEscapeChar.toList
 
   def compute(state: ParseOrUnparseState) = {
     val escChar = escapeChar.evaluate(state).charAt(0)
@@ -119,8 +119,8 @@ class EscapeSchemeCharUnparseEv(
   ci: DPathCompileInfo
 ) extends EscapeSchemeUnparseEv(ci) {
 
-  override def runtimeDependencies =
-    Vector(escapeChar) ++ optEscapeEscapeChar.toList ++ 
extraEscapedChars.toList
+  override val runtimeDependencies =
+    Array(escapeChar) ++ optEscapeEscapeChar.toList ++ extraEscapedChars.toList
 
   def compute(state: ParseOrUnparseState) = {
     val escChar = escapeChar.evaluate(state).charAt(0)
@@ -142,7 +142,7 @@ class EscapeSchemeBlockParseEv(
   ci: DPathCompileInfo
 ) extends EscapeSchemeParseEv(ci) {
 
-  override def runtimeDependencies = optEscapeEscapeChar.toList
+  override val runtimeDependencies = optEscapeEscapeChar.toList.toArray
 
   val bs = EscapeBlockStartCooker.convertConstant(blockStart, ci, forUnparse = 
false)
   val be = EscapeBlockEndCooker.convertConstant(blockEnd, ci, forUnparse = 
false)
@@ -162,7 +162,8 @@ class EscapeSchemeBlockUnparseEv(
   ci: DPathCompileInfo
 ) extends EscapeSchemeUnparseEv(ci) {
 
-  override def runtimeDependencies = optEscapeEscapeChar.toList ++ 
extraEscapedChars.toList
+  override val runtimeDependencies =
+    (optEscapeEscapeChar.toList ++ extraEscapedChars.toList).toArray
 
   val bs = EscapeBlockStartCooker.convertConstant(blockStart, ci, forUnparse = 
true)
   val be = EscapeBlockEndCooker.convertConstant(blockEnd, ci, forUnparse = 
true)
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvFieldDFA.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvFieldDFA.scala
index 682cab1e0..8e24964fe 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvFieldDFA.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvFieldDFA.scala
@@ -26,7 +26,7 @@ class FieldDFAParseEv(val escapeSchemeEv: 
Maybe[EscapeSchemeParseEv], ci: DPathC
   extends Evaluatable[DFAField](ci)
   with InfosetCachedEvaluatable[DFAField] {
 
-  override def runtimeDependencies = escapeSchemeEv.toList
+  override val runtimeDependencies = escapeSchemeEv.toList.toArray
 
   def compute(state: ParseOrUnparseState) = {
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvTextNumber.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvTextNumber.scala
index fdd11774c..3eb8a1489 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvTextNumber.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/EvTextNumber.scala
@@ -45,7 +45,7 @@ class TextStandardDecimalSeparatorEv(expr: 
CompiledExpression[String], tci: DPat
     tci
   )
   with InfosetCachedEvaluatable[List[String]] {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 }
 
 class TextStandardGroupingSeparatorEv(expr: CompiledExpression[String], tci: 
DPathCompileInfo)
@@ -55,7 +55,7 @@ class TextStandardGroupingSeparatorEv(expr: 
CompiledExpression[String], tci: DPa
     tci
   )
   with InfosetCachedEvaluatable[String] {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 }
 
 class TextStandardExponentRepEv(expr: CompiledExpression[String], tci: 
DPathCompileInfo)
@@ -65,7 +65,7 @@ class TextStandardExponentRepEv(expr: 
CompiledExpression[String], tci: DPathComp
     tci
   )
   with InfosetCachedEvaluatable[String] {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 }
 
 class TextNumberFormatEv(
@@ -86,8 +86,8 @@ class TextNumberFormatEv(
 ) extends Evaluatable[DecimalFormat](tci)
   with InfosetCachedEvaluatable[DecimalFormat] {
 
-  override def runtimeDependencies =
-    (decimalSepEv.toList ++ groupingSepEv.toList ++ 
exponentRepEv.toList).toVector
+  override val runtimeDependencies =
+    (decimalSepEv.toList ++ groupingSepEv.toList ++ 
exponentRepEv.toList).toArray
 
   private def checkUnique(
     decimalSep: MaybeChar,
@@ -245,7 +245,7 @@ class TextBooleanTrueRepEv(
     tci
   )
   with InfosetCachedEvaluatable[List[String]] {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override final protected def compute(state: ParseOrUnparseState): 
List[String] = {
     if (mustBeSameLength) {
@@ -279,5 +279,5 @@ class TextBooleanFalseRepEv(expr: 
CompiledExpression[String], tci: DPathCompileI
     tci
   )
   with InfosetCachedEvaluatable[List[String]] {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 }
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/Evaluatable.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/Evaluatable.scala
index 9fef3a22e..4e30c335c 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/Evaluatable.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/Evaluatable.scala
@@ -175,7 +175,7 @@ abstract class Evaluatable[+T <: AnyRef](
    * Important - Evalutables MUST declare all evaluatables they depend on. But 
only those
    * they directly depend on. (Not the dependents of the dependents...)
    */
-  def runtimeDependencies: Seq[Evaluatable[AnyRef]]
+  val runtimeDependencies: Array[Evaluatable[AnyRef]]
 
   /**
    * Been compiled yet?
@@ -453,7 +453,7 @@ abstract class EvaluatableExpression[ExprType <: AnyRef](
 ) extends Evaluatable[ExprType](ci)
   with ExprEvalMixin[ExprType] {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override final def toBriefXML(depth: Int = -1) =
     "<EvaluatableExpression eName='" + ci.diagnosticDebugName + "' expr=" + 
expr
@@ -475,7 +475,7 @@ trait EvaluatableConvertedExpressionMixin[ExprType <: 
AnyRef, +ConvertedType <:
 
   protected def converter: Converter[ExprType, ConvertedType]
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array[Evaluatable[AnyRef]]()
 
   override final def toBriefXML(depth: Int = -1) =
     if (this.isConstant) this.constValue.toString else expr.toBriefXML(depth)
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/PackedBinaryTraits.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/PackedBinaryTraits.scala
index cc05f382d..a29163c3c 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/PackedBinaryTraits.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/PackedBinaryTraits.scala
@@ -93,7 +93,7 @@ abstract class PackedBinaryDecimalBaseParser(
 ) extends PrimParser
   with PackedBinaryConversion[JBigDecimal]
   with PackedBinaryLengthCheck {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   protected def getBitLength(s: ParseOrUnparseState): Int
 
@@ -138,7 +138,7 @@ abstract class PackedBinaryIntegerBaseParser(
 ) extends PrimParser
   with PackedBinaryConversion[JBigInteger]
   with PackedBinaryLengthCheck {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   protected def getBitLength(s: ParseOrUnparseState): Int
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/ProcessorBases.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/ProcessorBases.scala
index 1e5ba98df..7558c3946 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/ProcessorBases.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/ProcessorBases.scala
@@ -51,7 +51,7 @@ trait Processor extends ToBriefXMLImpl with Serializable {
   // things common to both unparser and parser go here.
   def context: RuntimeData
   override def childProcessors: Vector[Processor]
-  def runtimeDependencies: Vector[Evaluatable[AnyRef]]
+  val runtimeDependencies: Array[Evaluatable[AnyRef]]
 
   var isInitialized: Boolean = false
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/VariableMap1.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/VariableMap1.scala
index f33174c7e..7d8cb037e 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/VariableMap1.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/VariableMap1.scala
@@ -121,7 +121,7 @@ class VariableInstance private (val rd: 
VariableRuntimeData) extends Serializabl
   }
 
   override def toString: String =
-    "VariableInstance(%s,%s,%s,%s)".format(state, value, rd, 
rd.maybeDefaultValueExpr)
+    s"VariableInstance($state,$value,$rd,${rd.maybeDefaultValueExpr})"
 
   def copy(
     state: VariableState = state,
@@ -164,8 +164,7 @@ class VariableHasNoValue(qname: NamedQName, context: 
VariableRuntimeData)
   extends VariableException(
     qname,
     context,
-    "Variable map (runtime): variable %s has no value. It was not set, and has 
no default value."
-      .format(qname)
+    s"Variable map (runtime): variable $qname has no value. It was not set, 
and has no default value."
   )
   with RetryableException
 
@@ -173,7 +172,7 @@ class VariableSuspended(qname: NamedQName, context: 
VariableRuntimeData)
   extends VariableException(
     qname,
     context,
-    "Variable map (runtime): variable %s is currently suspended".format(qname)
+    s"Variable map (runtime): variable $qname is currently suspended"
   )
   with RetryableException
 
@@ -186,8 +185,7 @@ class VariableCircularDefinition(qname: NamedQName, 
context: VariableRuntimeData
   extends VariableException(
     qname,
     context,
-    "Variable map (runtime): variable %s is part of a circular definition with 
other variables"
-      .format(qname)
+    s"Variable map (runtime): variable $qname is part of a circular definition 
with other variables"
   )
 
 /**
@@ -367,15 +365,11 @@ class VariableMap private (
     vrd.direction match {
       case VariableDirection.ParseOnly if (!state.isInstanceOf[PState]) =>
         state.SDE(
-          "Attempting to read variable %s which is marked as parseOnly during 
unparsing".format(
-            varQName
-          )
+          s"Attempting to read variable $varQName which is marked as parseOnly 
during unparsing"
         )
       case VariableDirection.UnparseOnly if (!state.isInstanceOf[UState]) =>
         state.SDE(
-          "Attempting to read variable %s which is marked as unparseOnly 
during parsing".format(
-            varQName
-          )
+          s"Attempting to read variable $varQName which is marked as 
unparseOnly during parsing"
         )
       case _ => // Do nothing
     }
@@ -538,8 +532,7 @@ class VariableMap private (
           case 1 => Some(vTable(candidates.head.vmapIndex))
           case _ => {
             val msg =
-              "External variable binding %s is ambiguous. A namespace is 
required to resolve the ambiguity. Found variables: %s"
-                .format(bindingQName, 
candidates.map(_.globalQName.toString).mkString(", "))
+              s"External variable binding $bindingQName is ambiguous. A 
namespace is required to resolve the ambiguity. Found variables: 
${candidates.map(_.globalQName.toString).mkString(", ")}"
             throw new ExternalVariableException(msg)
           }
         }
@@ -570,11 +563,8 @@ class VariableMap private (
                 variable.rd.primType.fromXMLString(newValue)
               } catch {
                 case e: InvalidPrimitiveDataException => {
-                  val msg = "Value for variable %s is not a valid %s: 
%s".format(
-                    variable.rd.globalQName,
-                    variable.rd.primType.globalQName,
-                    newValue
-                  )
+                  val msg =
+                    s"Value for variable ${variable.rd.globalQName} is not a 
valid ${variable.rd.primType.globalQName}: $newValue"
                   throw new ExternalVariableException(msg)
                 }
               }
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/AssertPatternParsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/AssertPatternParsers.scala
index cacb745fc..a944c4337 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/AssertPatternParsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/AssertPatternParsers.scala
@@ -73,7 +73,7 @@ class AssertPatternParser(
   override val failureType: FailureType
 ) extends PrimParser
   with AssertParserMixin {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def toBriefXML(depthLimit: Int = -1) = {
     val kindString = if (discrim) "Discriminator" else "Assertion"
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/BinaryBooleanParsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/BinaryBooleanParsers.scala
index a4a30de0b..c2b6eb152 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/BinaryBooleanParsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/BinaryBooleanParsers.scala
@@ -93,7 +93,7 @@ class BinaryBooleanParser(
   lengthKind: LengthKind
 ) extends BinaryBooleanParserBase(binaryBooleanTrueRep, binaryBooleanFalseRep, 
lengthUnits) {
 
-  override def runtimeDependencies = Vector(lengthEv)
+  override val runtimeDependencies = Array(lengthEv)
 
   override def getBitLength(state: PState): Int = {
     val nBytesAsJLong = lengthEv.evaluate(state)
@@ -113,7 +113,7 @@ class BinaryBooleanBitLimitLengthParser(
 ) extends BinaryBooleanParserBase(binaryBooleanTrueRep, binaryBooleanFalseRep, 
lengthUnits)
   with BitLengthFromBitLimitMixin {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def getBitLength(state: PState): Int = {
     getLengthInBits(state).toInt
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/BinaryNumberParsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/BinaryNumberParsers.scala
index e129a4925..790b35c9d 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/BinaryNumberParsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/BinaryNumberParsers.scala
@@ -31,7 +31,7 @@ import 
org.apache.daffodil.runtime1.processors.ParseOrUnparseState
 import org.apache.daffodil.runtime1.processors.unparsers.UState
 
 class BinaryFloatParser(override val context: ElementRuntimeData) extends 
PrimParser {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   def parse(start: PState): Unit = {
     val dis = start.dataInputStream
@@ -47,7 +47,7 @@ class BinaryFloatParser(override val context: 
ElementRuntimeData) extends PrimPa
 }
 
 class BinaryDoubleParser(override val context: ElementRuntimeData) extends 
PrimParser {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   def parse(start: PState): Unit = {
     val dis = start.dataInputStream
@@ -92,7 +92,7 @@ abstract class BinaryDecimalParserBase(
   binaryDecimalVirtualPoint: Int
 ) extends PrimParser
   with BinaryNumberCheckWidth {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   protected def getBitLength(s: ParseOrUnparseState): Int
 
@@ -138,7 +138,7 @@ abstract class BinaryIntegerBaseParser(
   override val context: ElementRuntimeData
 ) extends PrimParser
   with BinaryNumberCheckWidth {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   protected def getBitLength(s: ParseOrUnparseState): Int
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/BlobLengthParsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/BlobLengthParsers.scala
index 5dacd2a8d..eb2e1979d 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/BlobLengthParsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/BlobLengthParsers.scala
@@ -105,7 +105,7 @@ sealed abstract class BlobLengthParser(override val 
context: ElementRuntimeData)
 final class BlobSpecifiedLengthParser(erd: ElementRuntimeData, lengthEv: 
LengthInBitsEv)
   extends BlobLengthParser(erd) {
 
-  override def runtimeDependencies = Vector(lengthEv)
+  override val runtimeDependencies = Array(lengthEv)
 
   override def getLengthInBits(pstate: PState): Long = {
     lengthEv.evaluate(pstate).get
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/ConvertTextStandardNumberParser.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/ConvertTextStandardNumberParser.scala
index 609e2a6e5..671c238c7 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/ConvertTextStandardNumberParser.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/ConvertTextStandardNumberParser.scala
@@ -43,7 +43,7 @@ case class ConvertTextCombinatorParser(
   converterParser: Parser
 ) extends CombinatorParser(rd) {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def childProcessors = Vector(valueParser, converterParser)
 
@@ -166,7 +166,7 @@ case class ConvertTextStandardNumberParser(
 ) extends TextPrimParser
   with TextDecimalVirtualPointMixin {
 
-  override def runtimeDependencies = Vector(textNumberFormatEv)
+  override val runtimeDependencies = Array(textNumberFormatEv)
 
   private val primNumeric = 
context.optPrimType.get.asInstanceOf[NodeInfo.PrimType.PrimNumeric]
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/DelimitedParsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/DelimitedParsers.scala
index 6d3c739f4..8d196c5c8 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/DelimitedParsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/DelimitedParsers.scala
@@ -50,7 +50,7 @@ class StringDelimitedParser(
 ) extends TextPrimParser
   with CaptureParsingValueLength {
 
-  override def runtimeDependencies = Vector(fieldDFAEv, 
context.encInfo.charsetEv)
+  override val runtimeDependencies = Array(fieldDFAEv, 
context.encInfo.charsetEv)
 
   override val charsetEv = context.encInfo.charsetEv
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/DelimiterParsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/DelimiterParsers.scala
index 6dd5caa9a..6ab9b03e2 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/DelimiterParsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/DelimiterParsers.scala
@@ -51,7 +51,7 @@ class DelimiterTextParser(
   mustMatchNonZeroData: Boolean
 ) extends TextPrimParser {
 
-  override def runtimeDependencies = rd.encodingInfo.runtimeDependencies
+  override val runtimeDependencies = rd.encodingInfo.runtimeDependencies
   override def context = rd
 
   override val nom = delimiterType.toString
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/ElementCombinator1.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/ElementCombinator1.scala
index f6ab4d3b3..a42187fb1 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/ElementCombinator1.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/ElementCombinator1.scala
@@ -44,7 +44,7 @@ abstract class ElementParserBase(
   eRepTypeParser: Maybe[Parser]
 ) extends CombinatorParser(erd) {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   def move(pstate: PState): Unit // implement for different kinds of "moving 
over to next thing"
   def parseBegin(pstate: PState): Unit
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/ElementKindParsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/ElementKindParsers.scala
index 1f9934df1..876898871 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/ElementKindParsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/ElementKindParsers.scala
@@ -34,7 +34,7 @@ import org.apache.daffodil.runtime1.processors.TermRuntimeData
 class ComplexTypeParser(rd: RuntimeData, bodyParser: Parser) extends 
CombinatorParser(rd) {
   override def nom = "ComplexType"
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def childProcessors = Vector(bodyParser)
 
@@ -61,7 +61,7 @@ class DelimiterStackParser(
 
   override def childProcessors = Vector(bodyParser)
 
-  override def runtimeDependencies = delimiters.toVector
+  override val runtimeDependencies = delimiters.toArray
 
   def parse(start: PState): Unit = {
 
@@ -105,7 +105,7 @@ class DynamicEscapeSchemeParser(
 
   override def childProcessors = Vector(bodyParser)
 
-  override def runtimeDependencies = Vector(escapeScheme)
+  override val runtimeDependencies = Array(escapeScheme)
 
   def parse(start: PState): Unit = {
     // evaluate the dynamic escape scheme in the correct scope. the resulting
@@ -131,7 +131,7 @@ class DynamicEscapeSchemeParser(
  */
 class ChoiceBranchEmptyParser(val context: RuntimeData) extends 
PrimParserNoData {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   def parse(state: PState): Unit = {
     // do nothing
@@ -150,7 +150,7 @@ abstract class ChoiceDispatchCombinatorParserBase(
 
   override def nom = "ChoiceDispatch"
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def childProcessors =
     dispatchBranchKeyMap.values.iterator.asScala.map(_._1).toVector ++
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/ExpressionEvaluatingParsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/ExpressionEvaluatingParsers.scala
index 4d53bdf15..cf096b007 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/ExpressionEvaluatingParsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/ExpressionEvaluatingParsers.scala
@@ -42,7 +42,7 @@ abstract class ExpressionEvaluationParser(
 
   override val context: RuntimeData = contextParam
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def childProcessors = Vector()
 
@@ -90,7 +90,7 @@ final class NewVariableInstanceStartParser(vrd: 
VariableRuntimeData, trd: TermRu
 
   override def context = trd
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   def parse(start: PState): Unit = {
     val nvi = start.newVariableInstance(vrd)
@@ -111,7 +111,7 @@ final class NewVariableInstanceEndParser(vrd: 
VariableRuntimeData, trd: TermRunt
   extends PrimParser {
 
   override def context = trd
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   def parse(start: PState) = {
     start.removeVariableInstance(vrd)
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/FramingParsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/FramingParsers.scala
index 0ced38c37..686550d1f 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/FramingParsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/FramingParsers.scala
@@ -23,7 +23,7 @@ import org.apache.daffodil.runtime1.processors.TextProcessor
 class SkipRegionParser(skipInBits: Int, override val context: TermRuntimeData)
   extends PrimParser {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def parse(pstate: PState) = {
     val dis = pstate.dataInputStream
@@ -34,7 +34,7 @@ class SkipRegionParser(skipInBits: Int, override val context: 
TermRuntimeData)
 class AlignmentFillParser(alignmentInBits: Int, override val context: 
TermRuntimeData)
   extends PrimParser {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def parse(pstate: PState): Unit = {
     val dis = pstate.dataInputStream
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/HexBinaryLengthParsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/HexBinaryLengthParsers.scala
index 7c9f50efc..b6c5b51fa 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/HexBinaryLengthParsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/HexBinaryLengthParsers.scala
@@ -75,7 +75,7 @@ sealed abstract class HexBinaryLengthParser(override val 
context: ElementRuntime
 final class HexBinarySpecifiedLengthParser(erd: ElementRuntimeData, lengthEv: 
LengthInBitsEv)
   extends HexBinaryLengthParser(erd) {
 
-  override def runtimeDependencies = Vector(lengthEv)
+  override val runtimeDependencies = Array(lengthEv)
 
   override def getLengthInBits(pstate: PState): Long = {
     lengthEv.evaluate(pstate).get
@@ -86,7 +86,7 @@ final class HexBinarySpecifiedLengthParser(erd: 
ElementRuntimeData, lengthEv: Le
 final class HexBinaryEndOfBitLimitParser(erd: ElementRuntimeData)
   extends HexBinaryLengthParser(erd) {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def getLengthInBits(pstate: PState): Long = {
     pstate.bitLimit0b.get - pstate.bitPos0b
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/HiddenGroupCombinatorParser.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/HiddenGroupCombinatorParser.scala
index 86a0a59bd..b79bea9eb 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/HiddenGroupCombinatorParser.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/HiddenGroupCombinatorParser.scala
@@ -30,7 +30,7 @@ class HiddenGroupCombinatorParser(ctxt: 
ModelGroupRuntimeData, bodyParser: Parse
 
   override def childProcessors = Vector(bodyParser)
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   def parse(start: PState): Unit = {
     try {
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/InitiatedContentParsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/InitiatedContentParsers.scala
index 468067165..010dd05d4 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/InitiatedContentParsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/InitiatedContentParsers.scala
@@ -24,7 +24,7 @@ final class 
InitiatedContentDiscrimOnIndexGreaterThanMinParser(
   min: Int,
   override val context: ElementRuntimeData
 ) extends PrimParser {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   final def parse(start: PState): Unit = {
     if (start.arrayIterationPos > min)
@@ -34,7 +34,7 @@ final class 
InitiatedContentDiscrimOnIndexGreaterThanMinParser(
 
 final class InitiatedContentDiscrimChoiceParser(override val context: 
TermRuntimeData)
   extends PrimParser {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   final def parse(start: PState): Unit = {
     start.resolvePointOfUncertainty()
@@ -44,7 +44,7 @@ final class InitiatedContentDiscrimChoiceParser(override val 
context: TermRuntim
 final class InitiatedContentDiscrimChoiceOnlyOnFirstIndexParser(
   override val context: TermRuntimeData
 ) extends PrimParser {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   final def parse(start: PState): Unit = {
     if (start.arrayIterationPos == 1)
@@ -56,7 +56,7 @@ final class 
InitiatedContentDiscrimChoiceAndIndexGreaterThanMinParser(
   min: Int,
   override val context: ElementRuntimeData
 ) extends PrimParser {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   final def parse(start: PState): Unit = {
     // Resolves PoUs associated with arrays with some minimum number of
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/NilEmptyCombinatorParsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/NilEmptyCombinatorParsers.scala
index 4f92a0204..5a75cc46b 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/NilEmptyCombinatorParsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/NilEmptyCombinatorParsers.scala
@@ -24,7 +24,7 @@ abstract class NilOrValueParser(ctxt: TermRuntimeData, 
nilParser: Parser, valueP
   extends CombinatorParser(ctxt) {
 
   override def childProcessors = Vector(nilParser, valueParser)
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   def parse(pstate: PState): Unit = {
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/NilParsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/NilParsers.scala
index faaa285ba..3eef0468a 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/NilParsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/NilParsers.scala
@@ -28,7 +28,7 @@ abstract class LiteralNilOfSpecifiedLengthParserBase(erd: 
ElementRuntimeData)
 
   private val eName = erd.name
 
-  override def runtimeDependencies = Vector(erd.encInfo.charsetEv)
+  override val runtimeDependencies = Array(erd.encInfo.charsetEv)
   override val context = erd
 
   override val charsetEv = erd.encInfo.charsetEv
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/NonBaseTenTextNumberParser.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/NonBaseTenTextNumberParser.scala
index 16acb04f1..c744647fe 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/NonBaseTenTextNumberParser.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/NonBaseTenTextNumberParser.scala
@@ -26,7 +26,7 @@ import 
org.apache.daffodil.runtime1.processors.ElementRuntimeData
 class ConvertNonBaseTenTextNumberParser(override val context: 
ElementRuntimeData, base: Int)
   extends TextPrimParser {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   private val primNumeric = 
context.optPrimType.get.asInstanceOf[NodeInfo.PrimType.PrimNumeric]
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/Parser.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/Parser.scala
index 6e978e37a..c2d21bd6c 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/Parser.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/Parser.scala
@@ -212,7 +212,7 @@ trait TextPrimParser extends PrimParser with TextProcessor
  * optimized out.
  */
 final class NadaParser(override val context: RuntimeData) extends 
PrimParserNoData {
-  override def runtimeDependencies: Vector[Evaluatable[AnyRef]] = Vector()
+  override val runtimeDependencies: Array[Evaluatable[AnyRef]] = Array()
 
   override def isEmpty = true
 
@@ -232,7 +232,7 @@ final class SeqCompParser(
   val childParsers: Array[Parser],
   testAssert: Array[Parser]
 ) extends CombinatorParser(context) {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
   override def childProcessors = childParsers.toVector
 
   override def nom = "seq"
@@ -265,7 +265,7 @@ final class SeqCompParser(
 
 class ChoiceParser(ctxt: RuntimeData, val childParsers: Array[Parser])
   extends CombinatorParser(ctxt) {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
   override def childProcessors = childParsers.toVector
 
   override def nom = "choice"
@@ -325,7 +325,7 @@ class ChoiceParser(ctxt: RuntimeData, val childParsers: 
Array[Parser])
 }
 
 case class DummyParser(override val context: TermRuntimeData) extends 
PrimParserNoData {
-  override def runtimeDependencies: Vector[Evaluatable[AnyRef]] = Vector()
+  override val runtimeDependencies: Array[Evaluatable[AnyRef]] = Array()
 
   def parse(pstate: PState): Unit =
     pstate.SDE("Parser for " + context + " is not yet implemented.")
@@ -349,5 +349,5 @@ case class NotParsableParser(context: ElementRuntimeData) 
extends PrimParserNoDa
   }
 
   override def childProcessors = Vector()
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 }
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/PrimitivesDateTime1.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/PrimitivesDateTime1.scala
index 88002568e..ef45640b8 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/PrimitivesDateTime1.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/PrimitivesDateTime1.scala
@@ -41,7 +41,7 @@ case class ConvertTextCalendarParser(
   dateTimeFormatterEv: DateTimeFormatterEv
 ) extends TextPrimParser {
 
-  override def runtimeDependencies = Vector(calendarEv, dateTimeFormatterEv)
+  override val runtimeDependencies = Array(calendarEv, dateTimeFormatterEv)
 
   def parse(start: PState): Unit = {
     val node = start.simpleElement
@@ -135,7 +135,7 @@ case class ConvertBinaryCalendarSecMilliParser(
   lengthInBits: Int
 ) extends PrimParser {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   def parse(start: PState): Unit = {
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/RepTypeParsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/RepTypeParsers.scala
index 6c39bff8f..de38bc2a2 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/RepTypeParsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/RepTypeParsers.scala
@@ -100,7 +100,7 @@ class RepTypeParser(
   with WithDetachedParser {
 
   override def childProcessors = Vector(repTypeParser)
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def parse(pstate: PState): Unit = {
     val repValue =
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/SeparatedSequenceParsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/SeparatedSequenceParsers.scala
index 8ff39edb0..a6ff7c04e 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/SeparatedSequenceParsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/SeparatedSequenceParsers.scala
@@ -131,7 +131,7 @@ final class OrderedSeparatedSequenceParser(
   override val childParsers: Array[SequenceChildParser]
 ) extends SequenceParserBase(rd, isOrdered = true) {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
   override def childProcessors = (sep +: childParsers).toVector
 }
 
@@ -142,6 +142,6 @@ final class UnorderedSeparatedSequenceParser(
   override val childParsers: Array[SequenceChildParser]
 ) extends SequenceParserBase(rd, isOrdered = false) {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
   override def childProcessors = (sep +: childParsers).toVector
 }
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/SequenceChildBases.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/SequenceChildBases.scala
index cce424fdf..fc079317c 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/SequenceChildBases.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/SequenceChildBases.scala
@@ -202,7 +202,7 @@ abstract class SequenceChildParser(
 
   override def childProcessors: Vector[Processor] = Vector(childParser)
 
-  override def runtimeDependencies: Vector[Evaluatable[AnyRef]] = Vector()
+  override val runtimeDependencies: Array[Evaluatable[AnyRef]] = Array()
 
   final override def parse(pstate: PState): Unit =
     Assert.usageError("Not to be called on sequence child parsers")
@@ -473,7 +473,7 @@ abstract class OccursCountExpressionParser(
 
   final override def pouStatus = PoUStatus.NoPoU
 
-  final override def runtimeDependencies = Vector(occursCountEv)
+  final override val runtimeDependencies = Array(occursCountEv)
 
   final override def isBoundedMax = true
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/SpecifiedLengthParsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/SpecifiedLengthParsers.scala
index 2f3ee1f5d..8f1dc79d8 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/SpecifiedLengthParsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/SpecifiedLengthParsers.scala
@@ -38,7 +38,7 @@ sealed abstract class SpecifiedLengthParserBase(eParser: 
Parser, erd: RuntimeDat
   extends CombinatorParser(erd)
   with CaptureParsingValueLength {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def childProcessors = Vector(eParser)
 
@@ -283,7 +283,7 @@ final class SpecifiedLengthPrefixedCharactersParser(
 class CaptureStartOfContentLengthParser(override val context: 
ElementRuntimeData)
   extends PrimParser {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def parse(state: PState): Unit = {
     val dis = state.dataInputStream
@@ -295,7 +295,7 @@ class CaptureStartOfContentLengthParser(override val 
context: ElementRuntimeData
 class CaptureEndOfContentLengthParser(override val context: ElementRuntimeData)
   extends PrimParser {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def parse(state: PState): Unit = {
     val dis = state.dataInputStream
@@ -307,7 +307,7 @@ class CaptureEndOfContentLengthParser(override val context: 
ElementRuntimeData)
 class CaptureStartOfValueLengthParser(override val context: ElementRuntimeData)
   extends PrimParser {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def parse(state: PState): Unit = {
     val dis = state.dataInputStream
@@ -319,7 +319,7 @@ class CaptureStartOfValueLengthParser(override val context: 
ElementRuntimeData)
 class CaptureEndOfValueLengthParser(override val context: ElementRuntimeData)
   extends PrimParser {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def parse(state: PState): Unit = {
     val dis = state.dataInputStream
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/StringLengthParsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/StringLengthParsers.scala
index 08e28190e..119379d67 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/StringLengthParsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/StringLengthParsers.scala
@@ -40,7 +40,7 @@ final class StringOfSpecifiedLengthParser(
 ) extends TextPrimParser
   with StringOfSpecifiedLengthMixin {
 
-  override def runtimeDependencies = Vector(erd.encInfo.charsetEv)
+  override val runtimeDependencies = Array(erd.encInfo.charsetEv)
 
   override lazy val charsetEv = erd.encInfo.charsetEv
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/TextBooleanParser.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/TextBooleanParser.scala
index 0a0371620..2e8a1f2de 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/TextBooleanParser.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/TextBooleanParser.scala
@@ -31,7 +31,7 @@ case class ConvertTextBooleanParser(
   ignoreCase: Boolean
 ) extends TextPrimParser {
 
-  override def runtimeDependencies = Vector(textBooleanTrueRepEv, 
textBooleanFalseRepEv)
+  override val runtimeDependencies = Array(textBooleanTrueRepEv, 
textBooleanFalseRepEv)
 
   private def matches(str1: String, str2: String): Boolean = {
     if (ignoreCase) str1.equalsIgnoreCase(str2) else str1 == str2
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/UnseparatedSequenceParsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/UnseparatedSequenceParsers.scala
index ebb82983c..03bf4b76a 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/UnseparatedSequenceParsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/UnseparatedSequenceParsers.scala
@@ -83,7 +83,7 @@ class OrderedUnseparatedSequenceParser(
   override val childParsers: Array[SequenceChildParser]
 ) extends SequenceParserBase(rd, isOrdered = true) {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def childProcessors: Vector[Processor] = childParsers.toVector
 }
@@ -92,7 +92,7 @@ class UnorderedUnseparatedSequenceParser(
   rd: SequenceRuntimeData,
   override val childParsers: Array[SequenceChildParser]
 ) extends SequenceParserBase(rd, isOrdered = false) {
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def childProcessors: Vector[Processor] = childParsers.toVector
 }
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/ZonedTextParsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/ZonedTextParsers.scala
index e9b8bf338..6cfec53c5 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/ZonedTextParsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/parsers/ZonedTextParsers.scala
@@ -37,7 +37,7 @@ case class ConvertZonedCombinatorParser(
   converterParser: Parser
 ) extends CombinatorParser(rd) {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def childProcessors = Vector(valueParser, converterParser)
 
@@ -58,7 +58,7 @@ case class ConvertZonedNumberParser(
 ) extends TextPrimParser
   with TextDecimalVirtualPointMixin {
 
-  override def runtimeDependencies = Vector(textNumberFormatEv)
+  override val runtimeDependencies = Array(textNumberFormatEv)
 
   private val primNumeric = 
context.optPrimType.get.asInstanceOf[NodeInfo.PrimType.PrimNumeric]
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/unparsers/UState.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/unparsers/UState.scala
index d64a1710a..27a438187 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/unparsers/UState.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/unparsers/UState.scala
@@ -626,21 +626,21 @@ final class UStateMain private (
    * that is what has gone wrong.
    */
   override def inspectOrError = {
-    val m = inspectMaybe
-    if (m.isEmpty)
+    if (inspect)
+      inspectAccessor
+    else
       Assert.invariantFailed(
         "An InfosetEvent was required for unparsing, but no InfosetEvent was 
available."
       )
-    m.get
   }
 
   override def advanceOrError = {
-    val m = advanceMaybe
-    if (m.isEmpty)
+    if (advance)
+      advanceAccessor
+    else
       Assert.invariantFailed(
         "An InfosetEvent was required for unparsing, but no InfosetEvent was 
available."
       )
-    m.get
   }
 
   override def isInspectArrayEnd = {
@@ -668,24 +668,24 @@ final class UStateMain private (
   override val arrayIterationIndexStack = MStackOfLong()
   arrayIterationIndexStack.push(1L)
   override def moveOverOneArrayIterationIndexOnly() =
-    arrayIterationIndexStack.push(arrayIterationIndexStack.pop() + 1)
+    arrayIterationIndexStack.setTop(arrayIterationIndexStack.top + 1)
   override def arrayIterationPos = arrayIterationIndexStack.top
 
   override val occursIndexStack = MStackOfLong()
   occursIndexStack.push(1L)
-  override def moveOverOneOccursIndexOnly() = 
occursIndexStack.push(occursIndexStack.pop() + 1)
+  override def moveOverOneOccursIndexOnly() = 
occursIndexStack.setTop(occursIndexStack.top + 1)
   override def occursPos = occursIndexStack.top
 
   override val groupIndexStack = MStackOfLong()
   groupIndexStack.push(1L)
-  override def moveOverOneGroupIndexOnly() = 
groupIndexStack.push(groupIndexStack.pop() + 1)
+  override def moveOverOneGroupIndexOnly() = 
groupIndexStack.setTop(groupIndexStack.top + 1)
   override def groupPos = groupIndexStack.top
 
   // TODO: it doesn't look anything is actually reading the value of childindex
   // stack. Can we get rid of it?
   override val childIndexStack = MStackOfLong()
   childIndexStack.push(1L)
-  override def moveOverOneElementChildOnly() = 
childIndexStack.push(childIndexStack.pop() + 1)
+  override def moveOverOneElementChildOnly() = 
childIndexStack.setTop(childIndexStack.top + 1)
   override def childPos = childIndexStack.top
 
   override lazy val escapeSchemeEVCache = new 
MStackOfMaybe[EscapeSchemeUnparserHelper]
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/unparsers/Unparser.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/unparsers/Unparser.scala
index 18c998ca8..592544ff0 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/unparsers/Unparser.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/unparsers/Unparser.scala
@@ -30,7 +30,7 @@ sealed trait Unparser extends Processor {
 
   protected def unparse(ustate: UState): Unit
 
-  final def unparse1(ustate: UState, ignore: AnyRef = null) = {
+  final def unparse1(ustate: UState) = {
     Assert.invariant(isInitialized)
     val savedProc = ustate.maybeProcessor
     ustate.setProcessor(this)
@@ -134,7 +134,7 @@ trait SuspendableUnparser extends PrimUnparser {
 final class ErrorUnparser(override val context: TermRuntimeData = null)
   extends PrimUnparserNoData {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   def unparse(ustate: UState): Unit = {
     Assert.abort("Error Unparser")
@@ -149,7 +149,7 @@ final class SeqCompUnparser(context: RuntimeData, val 
childUnparsers: Array[Unpa
   extends CombinatorUnparser(context)
   with ToBriefXMLImpl {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def childProcessors = childUnparsers.toVector
 
@@ -174,7 +174,7 @@ case class DummyUnparser(primitiveName: String) extends 
PrimUnparserNoData {
 
   override def context = null
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def isEmpty = true
 
@@ -202,5 +202,5 @@ case class NotUnparsableUnparser(override val context: 
ElementRuntimeData)
   }
 
   override def childProcessors = Vector()
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 }
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/BCDUnparsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/BCDUnparsers.scala
index 0c47178d0..b3712f0e6 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/BCDUnparsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/BCDUnparsers.scala
@@ -47,7 +47,7 @@ class BCDIntegerRuntimeLengthUnparser(
 ) extends BCDIntegerBaseUnparser(e)
   with HasRuntimeExplicitLength {
 
-  override def runtimeDependencies = Vector(lengthEv)
+  override val runtimeDependencies = Array(lengthEv)
 }
 
 final class BCDIntegerDelimitedUnparser(e: ElementRuntimeData)
@@ -59,7 +59,7 @@ final class BCDIntegerDelimitedUnparser(e: ElementRuntimeData)
 final class BCDIntegerMinimumLengthUnparser(e: ElementRuntimeData)
   extends BCDIntegerBaseUnparser(e) {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def getBitLength(s: ParseOrUnparseState): Int = {
     val number = getNumberToPut(s.asInstanceOf[UState])
@@ -91,7 +91,7 @@ class BCDDecimalRuntimeLengthUnparser(
 ) extends BCDDecimalBaseUnparser(e, binaryDecimalVirtualPoint)
   with HasRuntimeExplicitLength {
 
-  override def runtimeDependencies = Vector(lengthEv)
+  override val runtimeDependencies = Array(lengthEv)
 }
 
 final class BCDDecimalDelimitedUnparser(e: ElementRuntimeData, 
binaryDecimalVirtualPoint: Int)
@@ -105,7 +105,7 @@ final class BCDDecimalMinimumLengthUnparser(
   binaryDecimalVirtualPoint: Int
 ) extends BCDDecimalBaseUnparser(e, binaryDecimalVirtualPoint) {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def getBitLength(s: ParseOrUnparseState): Int = {
     val number = getNumberToPut(s.asInstanceOf[UState])
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/BinaryBooleanUnparsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/BinaryBooleanUnparsers.scala
index 4c79467a3..2dc346735 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/BinaryBooleanUnparsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/BinaryBooleanUnparsers.scala
@@ -116,7 +116,7 @@ class BinaryBooleanUnparser(
     lengthUnits
   ) {
 
-  override def runtimeDependencies = Vector(lengthEv)
+  override val runtimeDependencies = Array(lengthEv)
 
   override def getBitLength(s: ParseOrUnparseState): Int = {
     val nBytesAsJLong = lengthEv.evaluate(s)
@@ -140,7 +140,7 @@ class BinaryBooleanMinimumLengthUnparser(
     lengthUnits
   ) {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def getBitLength(s: ParseOrUnparseState): Int = 32
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/BinaryNumberUnparsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/BinaryNumberUnparsers.scala
index 6b8a1708c..456973d23 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/BinaryNumberUnparsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/BinaryNumberUnparsers.scala
@@ -112,7 +112,7 @@ class BinaryIntegerKnownLengthUnparser(
 ) extends BinaryIntegerBaseUnparser(e)
   with HasKnownLengthInBits {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
 }
 
@@ -123,7 +123,7 @@ class BinaryIntegerRuntimeLengthUnparser(
 ) extends BinaryIntegerBaseUnparser(e)
   with HasRuntimeExplicitLength {
 
-  override def runtimeDependencies = Vector(lengthEv)
+  override val runtimeDependencies = Array(lengthEv)
 }
 
 class BinaryIntegerMinimumLengthUnparser(
@@ -133,7 +133,7 @@ class BinaryIntegerMinimumLengthUnparser(
 
   private val primNumeric = 
e.optPrimType.get.asInstanceOf[NodeInfo.PrimType.PrimNumeric]
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def getBitLength(s: ParseOrUnparseState): Int = {
     if (maybeNBits.isDefined) {
@@ -152,7 +152,7 @@ class BinaryIntegerMinimumLengthUnparser(
 
 class BinaryFloatUnparser(e: ElementRuntimeData) extends 
BinaryNumberBaseUnparser(e) {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def getBitLength(s: ParseOrUnparseState) = 32
 
@@ -169,7 +169,7 @@ class BinaryFloatUnparser(e: ElementRuntimeData) extends 
BinaryNumberBaseUnparse
 
 class BinaryDoubleUnparser(e: ElementRuntimeData) extends 
BinaryNumberBaseUnparser(e) {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def getBitLength(s: ParseOrUnparseState) = 64
 
@@ -191,7 +191,7 @@ class BinaryDecimalKnownLengthUnparser(
 ) extends BinaryDecimalUnparserBase(e, signed, binaryDecimalVirtualPoint)
   with HasKnownLengthInBits {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
 }
 
@@ -204,7 +204,7 @@ class BinaryDecimalRuntimeLengthUnparser(
 ) extends BinaryDecimalUnparserBase(e, signed, binaryDecimalVirtualPoint)
   with HasRuntimeExplicitLength {
 
-  override def runtimeDependencies = Vector(lengthEv)
+  override val runtimeDependencies = Array(lengthEv)
 }
 
 class BinaryDecimalMinimumLengthUnparser(
@@ -213,7 +213,7 @@ class BinaryDecimalMinimumLengthUnparser(
   binaryDecimalVirtualPoint: Int
 ) extends BinaryDecimalUnparserBase(e, signed, binaryDecimalVirtualPoint) {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def getBitLength(s: ParseOrUnparseState): Int = {
     // type is xs:decimal, the length is determined by the minimum number of
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/BlobLengthUnparser.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/BlobLengthUnparser.scala
index 107f3a8c9..ad8fd4796 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/BlobLengthUnparser.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/BlobLengthUnparser.scala
@@ -28,7 +28,7 @@ import org.apache.daffodil.runtime1.processors.unparsers.*
 
 abstract class BlobUnparserBase(override val context: ElementRuntimeData) 
extends PrimUnparser {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   protected def getLengthInBits(state: UState): Long
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ChoiceAndOtherVariousUnparsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ChoiceAndOtherVariousUnparsers.scala
index f6c9aac8b..9cfff9e97 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ChoiceAndOtherVariousUnparsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ChoiceAndOtherVariousUnparsers.scala
@@ -66,7 +66,7 @@ case class ChoiceBranchMap(
  */
 class ChoiceBranchEmptyUnparser(val context: RuntimeData) extends 
PrimUnparserNoData {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   def unparse(state: UState): Unit = {
     // do nothing
@@ -81,7 +81,7 @@ class ChoiceCombinatorUnparser(
   with ToBriefXMLImpl {
   override def nom = "Choice"
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def childProcessors = choiceBranchMap.childProcessors
 
@@ -160,8 +160,8 @@ class DelimiterStackUnparser(
 
   override def childProcessors = Vector(bodyUnparser)
 
-  override def runtimeDependencies =
-    (initiatorOpt.toList ++ separatorOpt.toList ++ 
terminatorOpt.toList).toVector
+  override val runtimeDependencies =
+    (initiatorOpt.toList ++ separatorOpt.toList ++ 
terminatorOpt.toList).toArray
 
   def unparse(state: UState): Unit = {
     // Evaluate Delimiters
@@ -194,7 +194,7 @@ class DynamicEscapeSchemeUnparser(
 
   override def childProcessors = Vector(bodyUnparser)
 
-  override def runtimeDependencies = Vector(escapeScheme)
+  override val runtimeDependencies = Array(escapeScheme)
 
   def unparse(state: UState): Unit = {
     // evaluate the dynamic escape scheme in the correct scope. the resulting
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertBinaryCalendarUnparser.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertBinaryCalendarUnparser.scala
index 4b53edd92..4b4f4b8c8 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertBinaryCalendarUnparser.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertBinaryCalendarUnparser.scala
@@ -40,7 +40,7 @@ case class ConvertBinaryCalendarSecMilliUnparser(
   /**
    * Primitive unparsers must override runtimeDependencies
    */
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   protected def putNumber(
     dos: DataOutputStream,
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertNonBaseTenTextNumberUnparser.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertNonBaseTenTextNumberUnparser.scala
index ab5ac3857..34eb953c1 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertNonBaseTenTextNumberUnparser.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertNonBaseTenTextNumberUnparser.scala
@@ -29,7 +29,7 @@ case class ConvertNonBaseTenTextNumberUnparser(
   base: Int
 ) extends TextPrimUnparser {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def unparse(state: UState): Unit = {
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertTextBooleanUnparser.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertTextBooleanUnparser.scala
index a5f57f6d0..a3ef6262b 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertTextBooleanUnparser.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertTextBooleanUnparser.scala
@@ -35,7 +35,7 @@ case class ConvertTextBooleanUnparser(
   /**
    * Primitive unparsers must override runtimeDependencies
    */
-  override def runtimeDependencies = Vector(textBooleanTrueRepEv, 
textBooleanFalseRepEv)
+  override val runtimeDependencies = Array(textBooleanTrueRepEv, 
textBooleanFalseRepEv)
 
   def unparse(state: UState): Unit = {
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertTextCalendarUnparser.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertTextCalendarUnparser.scala
index 386ab5cf7..b570a6eb2 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertTextCalendarUnparser.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertTextCalendarUnparser.scala
@@ -37,7 +37,7 @@ case class ConvertTextCalendarUnparser(
   /**
    * Primitive unparsers must override runtimeDependencies
    */
-  override def runtimeDependencies = Vector(calendarEv, dateTimeFormatterEv)
+  override val runtimeDependencies = Array(calendarEv, dateTimeFormatterEv)
 
   def unparse(state: UState): Unit = {
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertTextStandardNumberUnparser.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertTextStandardNumberUnparser.scala
index 278fe2ac8..f9277bd11 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertTextStandardNumberUnparser.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertTextStandardNumberUnparser.scala
@@ -34,7 +34,7 @@ case class ConvertTextCombinatorUnparser(
   converterUnparser: Unparser
 ) extends CombinatorUnparser(rd) {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def childProcessors = Vector(converterUnparser, valueUnparser)
 
@@ -56,7 +56,7 @@ case class ConvertTextNumberUnparser(
   with TextDecimalVirtualPointMixin
   with ToBriefXMLImpl {
 
-  override def runtimeDependencies = Vector(textNumberFormatEv)
+  override val runtimeDependencies = Array(textNumberFormatEv)
 
   override def unparse(state: UState): Unit = {
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertZonedNumberUnparser.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertZonedNumberUnparser.scala
index 86070f465..5936dff2b 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertZonedNumberUnparser.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ConvertZonedNumberUnparser.scala
@@ -30,7 +30,7 @@ case class ConvertZonedCombinatorUnparser(
   converterUnparser: Unparser
 ) extends CombinatorUnparser(rd) {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def childProcessors = Vector(converterUnparser, valueUnparser)
 
@@ -52,7 +52,7 @@ case class ConvertZonedNumberUnparser(
   with TextDecimalVirtualPointMixin
   with ToBriefXMLImpl {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def unparse(state: UState): Unit = {
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/DelimitedUnparsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/DelimitedUnparsers.scala
index 53a7ad846..bbb681444 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/DelimitedUnparsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/DelimitedUnparsers.scala
@@ -40,7 +40,7 @@ sealed class StringDelimitedUnparser(
   isDelimRequired: Boolean
 ) extends TextPrimUnparser {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   val fieldDFA = CreateFieldDFA()
   val textUnparser = new TextDelimitedUnparser(context)
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/DelimiterUnparsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/DelimiterUnparsers.scala
index 95f64f296..b91e4ce33 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/DelimiterUnparsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/DelimiterUnparsers.scala
@@ -35,7 +35,7 @@ class DelimiterTextUnparser(
 
   private def erd = context
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override lazy val nom = {
     if (delimiterType == DelimiterTextType.Initiator) "InitiatorUnparser"
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ElementUnparser.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ElementUnparser.scala
index 7c5c2e5a9..2aeb77c82 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ElementUnparser.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ElementUnparser.scala
@@ -55,14 +55,13 @@ class ElementUnspecifiedLengthUnparser(
   with RegularElementUnparserStartEndStrategy
   with RepMoveMixin {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array[Evaluatable[AnyRef]]()
 
 }
 
 sealed trait RepMoveMixin {
   def move(start: UState): Unit = {
-    val childIndex = start.childIndexStack.pop()
-    start.childIndexStack.push(childIndex + 1)
+    start.childIndexStack.setTop(start.childIndexStack.top + 1)
   }
 }
 
@@ -79,15 +78,14 @@ class ElementUnparserInputValueCalc(erd: 
ElementRuntimeData, setVarUnparsers: Ar
   extends ElementUnparserBase(erd, setVarUnparsers, Nope, Nope, Nope, Nope)
   with RegularElementUnparserStartEndStrategy {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   /**
    * Move over in the element children, but not in the group.
    * This avoids separators for this IVC element.
    */
   override def move(state: UState): Unit = {
-    val childIndex = state.childIndexStack.pop()
-    state.childIndexStack.push(childIndex + 1)
+    state.childIndexStack.setTop(state.childIndexStack.top + 1)
   }
 }
 
@@ -108,7 +106,7 @@ class ElementOVCUnspecifiedLengthUnparser(
   with OVCStartEndStrategy
   with RepMoveMixin {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
 }
 
@@ -298,7 +296,7 @@ class ElementSpecifiedLengthUnparser(
   with RegularElementUnparserStartEndStrategy
   with ElementSpecifiedLengthMixin {
 
-  override def runtimeDependencies = maybeTargetLengthEv.toList.toVector
+  override val runtimeDependencies = maybeTargetLengthEv.toList.toArray
 
   override def runContentUnparser(state: UState): Unit = {
     computeTargetLength(
@@ -357,7 +355,7 @@ class ElementOVCSpecifiedLengthUnparser(
   with OVCStartEndStrategy
   with ElementSpecifiedLengthMixin {
 
-  override def runtimeDependencies = maybeTargetLengthEv.toList.toVector
+  override val runtimeDependencies = maybeTargetLengthEv.toList.toArray
 
   private def suspendableExpression =
     new ElementOVCSpecifiedLengthUnparserSuspendableExpression(this, expr)
@@ -396,7 +394,7 @@ sealed trait ElementUnparserStartEndStrategy {
 
   protected def erd: ElementRuntimeData
 
-  def runtimeDependencies: Vector[Evaluatable[AnyRef]]
+  val runtimeDependencies: Array[Evaluatable[AnyRef]]
 }
 
 sealed trait RegularElementUnparserStartEndStrategy extends 
ElementUnparserStartEndStrategy {
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ExpressionEvaluatingUnparsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ExpressionEvaluatingUnparsers.scala
index 5fe097ef0..180b96f71 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ExpressionEvaluatingUnparsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/ExpressionEvaluatingUnparsers.scala
@@ -60,7 +60,7 @@ final class SetVariableUnparser(
   referencingContext: NonTermRuntimeData
 ) extends PrimUnparserNoData {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def childProcessors = Vector()
 
@@ -95,7 +95,7 @@ class NewVariableInstanceStartUnparser(vrd: 
VariableRuntimeData, trd: TermRuntim
   extends PrimUnparserNoData {
 
   override def context = trd
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def childProcessors = Vector()
 
@@ -120,7 +120,7 @@ class NewVariableInstanceEndUnparser(vrd: 
VariableRuntimeData, trd: TermRuntimeD
   extends PrimUnparserNoData {
 
   override def context = trd
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def childProcessors = Vector()
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/FramingUnparsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/FramingUnparsers.scala
index 0db0c34db..3e229ff1f 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/FramingUnparsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/FramingUnparsers.scala
@@ -26,7 +26,7 @@ import org.apache.daffodil.runtime1.processors.unparsers.*
 class SkipRegionUnparser(skipInBits: Int, override val context: 
TermRuntimeData)
   extends AlignmentPrimUnparser {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def unparse(state: UState) = {
     val dos = state.getDataOutputStream
@@ -73,7 +73,7 @@ class AlignmentFillUnparser(alignmentInBits: Int, override 
val context: TermRunt
   extends AlignmentPrimUnparser
   with SuspendableUnparser {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def suspendableOperation =
     new AlignmentFillUnparserSuspendableOperation(alignmentInBits, context)
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/HexBinaryLengthUnparser.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/HexBinaryLengthUnparser.scala
index db1e201ac..b2e645d2e 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/HexBinaryLengthUnparser.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/HexBinaryLengthUnparser.scala
@@ -27,7 +27,7 @@ import org.apache.daffodil.runtime1.processors.unparsers.*
 abstract class HexBinaryUnparserBase(override val context: ElementRuntimeData)
   extends PrimUnparser {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   protected def getLengthInBits(state: UState): Long
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/HiddenGroupCombinatorUnparser.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/HiddenGroupCombinatorUnparser.scala
index 23bd57841..070e78729 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/HiddenGroupCombinatorUnparser.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/HiddenGroupCombinatorUnparser.scala
@@ -31,7 +31,7 @@ class HiddenGroupCombinatorUnparser(ctxt: 
ModelGroupRuntimeData, bodyUnparser: U
 
   override def childProcessors = Vector(bodyUnparser)
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   def unparse(start: UState): Unit = {
     try {
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/IBM4690PackedDecimalUnparsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/IBM4690PackedDecimalUnparsers.scala
index 9f732208d..222b6e61a 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/IBM4690PackedDecimalUnparsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/IBM4690PackedDecimalUnparsers.scala
@@ -50,7 +50,7 @@ class IBM4690PackedIntegerRuntimeLengthUnparser(
 ) extends IBM4690PackedIntegerBaseUnparser(e)
   with HasRuntimeExplicitLength {
 
-  override def runtimeDependencies = Vector(lengthEv)
+  override val runtimeDependencies = Array(lengthEv)
 }
 
 final class IBM4690PackedIntegerDelimitedUnparser(e: ElementRuntimeData)
@@ -62,7 +62,7 @@ final class IBM4690PackedIntegerDelimitedUnparser(e: 
ElementRuntimeData)
 final class IBM4690PackedIntegerMinimumLengthUnparser(e: ElementRuntimeData)
   extends IBM4690PackedIntegerBaseUnparser(e) {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def getBitLength(s: ParseOrUnparseState): Int = {
     val number = getNumberToPut(s.asInstanceOf[UState])
@@ -101,7 +101,7 @@ class IBM4690PackedDecimalRuntimeLengthUnparser(
 ) extends IBM4690PackedDecimalBaseUnparser(e, binaryDecimalVirtualPoint, 
decimalSigned)
   with HasRuntimeExplicitLength {
 
-  override def runtimeDependencies = Vector(lengthEv)
+  override val runtimeDependencies = Array(lengthEv)
 }
 
 final class IBM4690PackedDecimalDelimitedUnparser(
@@ -119,7 +119,7 @@ final class IBM4690PackedDecimalMinimumLengthUnparser(
   decimalSigned: YesNo
 ) extends IBM4690PackedDecimalBaseUnparser(e, binaryDecimalVirtualPoint, 
decimalSigned) {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def getBitLength(s: ParseOrUnparseState): Int = {
     val number = getNumberToPut(s.asInstanceOf[UState])
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/NadaUnparser.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/NadaUnparser.scala
index 8a94ab13a..b831beff0 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/NadaUnparser.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/NadaUnparser.scala
@@ -27,7 +27,7 @@ class NadaUnparser(override val context: RuntimeData) extends 
PrimUnparser {
 
   override def toString = "Nada"
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def unparse(start: UState) = {
     Assert.abort("NadaUnparsers are all supposed to optimize out!")
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/NilEmptyCombinatorUnparsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/NilEmptyCombinatorUnparsers.scala
index e22c6102b..1d31e39d1 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/NilEmptyCombinatorUnparsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/NilEmptyCombinatorUnparsers.scala
@@ -28,7 +28,7 @@ case class SimpleNilOrValueUnparser(
   valueUnparser: Unparser
 ) extends CombinatorUnparser(ctxt) {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def childProcessors = Vector(nilUnparser, valueUnparser)
 
@@ -54,7 +54,7 @@ case class ComplexNilOrContentUnparser(
   contentUnparser: Unparser
 ) extends CombinatorUnparser(ctxt) {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def childProcessors = Vector(nilUnparser, contentUnparser)
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/NilUnparsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/NilUnparsers.scala
index 862b97af1..b9b2302d9 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/NilUnparsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/NilUnparsers.scala
@@ -26,7 +26,7 @@ class LiteralValueNilOfSpecifiedLengthUnparser(
   isForPattern: Boolean
 ) extends StringNoTruncateUnparser(erd) {
 
-  override def runtimeDependencies = Vector(slEv)
+  override val runtimeDependencies = Array(slEv)
 
   override protected def contentString(state: UState) = {
     slEv.evaluate(state)
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/PackedBinaryUnparserTraits.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/PackedBinaryUnparserTraits.scala
index 7c53bc172..62104d326 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/PackedBinaryUnparserTraits.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/PackedBinaryUnparserTraits.scala
@@ -41,7 +41,7 @@ abstract class PackedBinaryBaseUnparser(override val context: 
ElementRuntimeData
   extends PrimUnparser
   with PackedBinaryConversion {
 
-  override def runtimeDependencies: Vector[Evaluatable[AnyRef]] = Vector()
+  override val runtimeDependencies: Array[Evaluatable[AnyRef]] = Array()
 
   protected def getBitLength(s: ParseOrUnparseState): Int
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/PackedDecimalUnparsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/PackedDecimalUnparsers.scala
index 3feb90cb9..f3b5c8c7c 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/PackedDecimalUnparsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/PackedDecimalUnparsers.scala
@@ -55,7 +55,7 @@ class PackedIntegerRuntimeLengthUnparser(
 ) extends PackedIntegerBaseUnparser(e, packedSignCodes)
   with HasRuntimeExplicitLength {
 
-  override def runtimeDependencies = Vector(lengthEv)
+  override val runtimeDependencies = Array(lengthEv)
 }
 
 final class PackedIntegerDelimitedUnparser(
@@ -71,7 +71,7 @@ final class PackedIntegerMinimumLengthUnparser(
   packedSignCodes: PackedSignCodes
 ) extends PackedIntegerBaseUnparser(e, packedSignCodes) {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def getBitLength(s: ParseOrUnparseState): Int = {
     val number = getNumberToPut(s.asInstanceOf[UState])
@@ -121,7 +121,7 @@ class PackedDecimalRuntimeLengthUnparser(
   )
   with HasRuntimeExplicitLength {
 
-  override def runtimeDependencies = Vector(lengthEv)
+  override val runtimeDependencies = Array(lengthEv)
 }
 
 final class PackedDecimalDelimitedUnparser(
@@ -151,7 +151,7 @@ final class PackedDecimalMinimumLengthUnparser(
     decimalSigned
   ) {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def getBitLength(s: ParseOrUnparseState): Int = {
     val number = getNumberToPut(s.asInstanceOf[UState])
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/RepTypeUnparsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/RepTypeUnparsers.scala
index f0c3d809b..e642088ea 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/RepTypeUnparsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/RepTypeUnparsers.scala
@@ -36,7 +36,7 @@ class RepTypeUnparser(
 
   override def childProcessors = Vector(repTypeUnparser)
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   protected def unparse(ustate: UState): Unit = {
     Assert.invariant(ustate.currentInfosetNodeMaybe.isDefined)
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/SeparatedSequenceUnparsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/SeparatedSequenceUnparsers.scala
index 111bf8546..7c451f1dd 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/SeparatedSequenceUnparsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/SeparatedSequenceUnparsers.scala
@@ -125,7 +125,7 @@ class OrderedSeparatedSequenceUnparser(
   // have been optimized away
   Assert.invariant(childUnparsers.length > 0)
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def childProcessors = childUnparsers.toVector
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/SequenceChildUnparsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/SequenceChildUnparsers.scala
index beecd53a7..b1e7ac96f 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/SequenceChildUnparsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/SequenceChildUnparsers.scala
@@ -40,7 +40,7 @@ abstract class SequenceChildUnparser(
   val trd: TermRuntimeData
 ) extends CombinatorUnparser(srd) {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
 }
 
@@ -67,7 +67,7 @@ abstract class RepeatingChildUnparser(
     childUnparser.unparse1(state)
   }
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def toString = "RepUnparser(" + childUnparser.toString + ")"
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/SpecifiedLength2.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/SpecifiedLength2.scala
index 6974e3f3f..549f7a3c0 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/SpecifiedLength2.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/SpecifiedLength2.scala
@@ -210,7 +210,7 @@ class SimpleTypeRetryUnparser(
 ) extends PrimUnparser
   with SuspendableUnparser {
 
-  override final def runtimeDependencies = 
maybeUnparserTargetLengthInBitsEv.toSeq.toVector
+  override final val runtimeDependencies = 
maybeUnparserTargetLengthInBitsEv.toList.toArray
 
   final override def childProcessors = Vector(vUnparser)
 
@@ -225,7 +225,7 @@ class SimpleTypeRetryUnparser(
 class CaptureStartOfContentLengthUnparser(override val context: 
ElementRuntimeData)
   extends PrimUnparser {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def unparse(state: UState): Unit = {
     val dos = state.getDataOutputStream
@@ -243,7 +243,7 @@ class CaptureEndOfContentLengthUnparser(
   maybeFixedLengthInBits: MaybeULong
 ) extends PrimUnparser {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def unparse(state: UState): Unit = {
     val dos = state.getDataOutputStream
@@ -274,7 +274,7 @@ class CaptureEndOfContentLengthUnparser(
 class CaptureStartOfValueLengthUnparser(override val context: 
ElementRuntimeData)
   extends PrimUnparser {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def unparse(state: UState): Unit = {
     val dos = state.getDataOutputStream
@@ -290,7 +290,7 @@ class CaptureStartOfValueLengthUnparser(override val 
context: ElementRuntimeData
 class CaptureEndOfValueLengthUnparser(override val context: ElementRuntimeData)
   extends PrimUnparser {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def unparse(state: UState): Unit = {
     val dos = state.getDataOutputStream
@@ -479,7 +479,7 @@ class ElementUnusedUnparser(
 ) extends PrimUnparser
   with SuspendableUnparser {
 
-  override def runtimeDependencies = Vector(targetLengthEv)
+  override val runtimeDependencies = Array(targetLengthEv)
 
   override def suspendableOperation =
     new ElementUnusedUnparserSuspendableOperation(
@@ -583,7 +583,7 @@ class ChoiceUnusedUnparser(
 ) extends PrimUnparser
   with SuspendableUnparser {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def suspendableOperation = suspendableOp
 }
@@ -677,7 +677,7 @@ class OnlyPaddingUnparser(
 ) extends TextPrimUnparser
   with SuspendableUnparser {
 
-  override def runtimeDependencies = Vector(targetLengthEv)
+  override val runtimeDependencies = Array(targetLengthEv)
 
   override def suspendableOperation =
     new OnlyPaddingUnparserSuspendableOperation(
@@ -734,7 +734,7 @@ class NilLiteralCharacterUnparser(
 ) extends TextPrimUnparser
   with SuspendableUnparser {
 
-  override def runtimeDependencies = Vector(targetLengthEv)
+  override val runtimeDependencies = Array(targetLengthEv)
 
   override def suspendableOperation = new 
NilLiteralCharacterUnparserSuspendableOperation(
     context,
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/SpecifiedLengthUnparsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/SpecifiedLengthUnparsers.scala
index 44af8e887..0f9b8c0ea 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/SpecifiedLengthUnparsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/SpecifiedLengthUnparsers.scala
@@ -37,7 +37,7 @@ final class SpecifiedLengthExplicitImplicitUnparser(
   targetLengthInBitsEv: UnparseTargetLengthInBitsEv
 ) extends CombinatorUnparser(erd) {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def childProcessors = Vector(eUnparser)
 
@@ -141,7 +141,7 @@ class SpecifiedLengthPrefixedUnparser(
 ) extends CombinatorUnparser(erd)
   with CalculatedPrefixedLengthUnparserMixin {
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def childProcessors = Vector(prefixedLengthUnparser, eUnparser)
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/StreamSplitterMixin.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/StreamSplitterMixin.scala
index 3f3f81cac..51cda47ca 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/StreamSplitterMixin.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/StreamSplitterMixin.scala
@@ -88,7 +88,7 @@ class RegionSplitUnparser(override val context: 
TermRuntimeData)
 
   override def childProcessors: Vector[Processor] = Vector()
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override lazy val suspendableOperation = new 
RegionSplitSuspendableOperation(context)
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/StringLengthUnparsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/StringLengthUnparsers.scala
index 223b28df6..49e1b31af 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/StringLengthUnparsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/StringLengthUnparsers.scala
@@ -46,7 +46,7 @@ sealed abstract class StringSpecifiedLengthUnparserBase(val 
erd: ElementRuntimeD
 class StringNoTruncateUnparser(erd: ElementRuntimeData)
   extends StringSpecifiedLengthUnparserBase(erd) {
 
-  override def runtimeDependencies: Vector[Evaluatable[AnyRef]] = Vector()
+  override val runtimeDependencies: Array[Evaluatable[AnyRef]] = Array()
 
   override def unparse(state: UState): Unit = {
     val dos = state.getDataOutputStream
@@ -120,7 +120,7 @@ class StringMaybeTruncateBitsUnparser(
   charsetEv: CharsetEv
 ) extends StringSpecifiedLengthUnparserTruncateBase(stringTruncationType, erd) 
{
 
-  override def runtimeDependencies = Vector(targetLengthInBitsEv, charsetEv)
+  override val runtimeDependencies = Array(targetLengthInBitsEv, charsetEv)
 
   private def getLengthInBits(str: String, state: UState): (Long, Long) = {
     val cs = charsetEv.evaluate(state)
@@ -257,7 +257,7 @@ class StringMaybeTruncateCharactersUnparser(
   erd: ElementRuntimeData
 ) extends StringSpecifiedLengthUnparserTruncateBase(stringTruncationType, erd) 
{
 
-  override def runtimeDependencies = Vector(lengthInCharactersEv)
+  override val runtimeDependencies = Array(lengthInCharactersEv)
 
   override def unparse(state: UState): Unit = {
     val dos = state.getDataOutputStream
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/StringLiteralForUnparser.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/StringLiteralForUnparser.scala
index aeae0f4a2..a3611b512 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/StringLiteralForUnparser.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/StringLiteralForUnparser.scala
@@ -33,7 +33,7 @@ class NilStringLiteralForUnparserEv(
 ) extends Evaluatable[String](tci)
   with InfosetCachedEvaluatable[String] {
 
-  override def runtimeDependencies = maybeOutputNewLineEv.toList
+  override val runtimeDependencies = maybeOutputNewLineEv.toList.toArray
 
   override protected def compute(state: ParseOrUnparseState): String = {
     val endMarker = "__daffodil_stringLiteralForUnparser_endMarker__"
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/SuppressableSeparatorUnparser.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/SuppressableSeparatorUnparser.scala
index eeba3c2e6..691002394 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/SuppressableSeparatorUnparser.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/SuppressableSeparatorUnparser.scala
@@ -205,7 +205,7 @@ final class SuppressableSeparatorUnparser private (
 
   override def childProcessors: Vector[Processor] = Vector(sepUnparser)
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 }
 
 object SuppressableSeparatorUnparser {
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/UnseparatedSequenceUnparsers.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/UnseparatedSequenceUnparsers.scala
index d2bab9596..8b4488a88 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/UnseparatedSequenceUnparsers.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/unparsers/runtime1/UnseparatedSequenceUnparsers.scala
@@ -62,14 +62,14 @@ class OrderedUnseparatedSequenceUnparser(
   // have been optimized away
   Assert.invariant(childUnparsers.length > 0)
 
-  override def runtimeDependencies = Vector()
+  override val runtimeDependencies = Array()
 
   override def childProcessors = childUnparsers.toVector
 
   /**
    * Unparses one iteration of an array/optional element
    */
-  protected def unparseOne(
+  inline protected def unparseOne(
     unparser: SequenceChildUnparser,
     trd: TermRuntimeData,
     state: UState

Reply via email to