You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@daffodil.apache.org by ol...@apache.org on 2026/09/04 19:17:58 UTC

(daffodil) branch main updated: Add Maybe[T].toArray and fix DelimiterTextParser array aliasing

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

olabusayoT 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 4f1808674 Add Maybe[T].toArray and fix DelimiterTextParser array aliasing
4f1808674 is described below

commit 4f180867433be7ebc1e9a36c776b2389fbeaa874
Author: olabusayoT <50...@users.noreply.github.com>
AuthorDate: Fri Aug 21 13:01:43 2026 -0400

    Add Maybe[T].toArray and fix DelimiterTextParser array aliasing
    
    Added Maybe[T].toArray, replacing seven hand-rolled .toList.toArray
    call sites across the runtimeDependencies migration to Array (EvElement,
    EvEscapeSchemes, EvFieldDFA, StringLiteralForUnparser, SpecifiedLength2,
    ElementUnparser x2) with a single reusable method.
    
    DAFFODIL-3065
---
 daffodil-core/src/main/scala/org/apache/daffodil/lib/util/Maybe.scala | 2 ++
 .../scala/org/apache/daffodil/runtime1/processors/EvElement.scala     | 2 +-
 .../org/apache/daffodil/runtime1/processors/EvEscapeSchemes.scala     | 2 +-
 .../scala/org/apache/daffodil/runtime1/processors/EvFieldDFA.scala    | 2 +-
 .../org/apache/daffodil/unparsers/runtime1/ElementUnparser.scala      | 4 ++--
 .../org/apache/daffodil/unparsers/runtime1/SpecifiedLength2.scala     | 2 +-
 .../apache/daffodil/unparsers/runtime1/StringLiteralForUnparser.scala | 2 +-
 7 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/lib/util/Maybe.scala b/daffodil-core/src/main/scala/org/apache/daffodil/lib/util/Maybe.scala
index ca6814809..1d3f7efff 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/lib/util/Maybe.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/lib/util/Maybe.scala
@@ -48,6 +48,8 @@ final class Maybe[+T <: AnyRef](val v: AnyRef) extends AnyVal with Serializable
   //  @inline final def iterator: Iterator[T] = if (isEmpty) collection.Iterator.empty else collection.Iterator.single(get)
   @inline final def toList: List[T] = if (isEmpty) List() else new ::(get, Nil)
   @inline final def toSeq: Seq[T] = toList
+  @inline final def toArray[U >: T: scala.reflect.ClassTag]: Array[U] =
+    if (isEmpty) Array.empty[U] else Array[U](value)
   // @inline final def getOrElse[U >: T](default: U): U = if (isEmpty) default else get
 
   /**
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 50a07a7e5..d8117cb12 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
@@ -183,7 +183,7 @@ class MinLengthInBitsEv(
   ci: DPathCompileInfo
 ) extends LengthInBitsEvBase(ci, lengthUnits, lengthKind) {
 
-  override val runtimeDependencies = maybeCharsetEv.toList.toArray
+  override val runtimeDependencies = maybeCharsetEv.toArray
 
   override protected def lengthInLengthUnits(state: ParseOrUnparseState) = minLen
 }
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 9e22fc57e..d7e0a0b58 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
@@ -142,7 +142,7 @@ class EscapeSchemeBlockParseEv(
   ci: DPathCompileInfo
 ) extends EscapeSchemeParseEv(ci) {
 
-  override val runtimeDependencies = optEscapeEscapeChar.toList.toArray
+  override val runtimeDependencies = optEscapeEscapeChar.toArray
 
   val bs = EscapeBlockStartCooker.convertConstant(blockStart, ci, forUnparse = false)
   val be = EscapeBlockEndCooker.convertConstant(blockEnd, ci, forUnparse = false)
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 8e24964fe..b802a926e 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 val runtimeDependencies = escapeSchemeEv.toList.toArray
+  override val runtimeDependencies = escapeSchemeEv.toArray
 
   def compute(state: ParseOrUnparseState) = {
 
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 2aeb77c82..c1343654b 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
@@ -296,7 +296,7 @@ class ElementSpecifiedLengthUnparser(
   with RegularElementUnparserStartEndStrategy
   with ElementSpecifiedLengthMixin {
 
-  override val runtimeDependencies = maybeTargetLengthEv.toList.toArray
+  override val runtimeDependencies = maybeTargetLengthEv.toArray
 
   override def runContentUnparser(state: UState): Unit = {
     computeTargetLength(
@@ -355,7 +355,7 @@ class ElementOVCSpecifiedLengthUnparser(
   with OVCStartEndStrategy
   with ElementSpecifiedLengthMixin {
 
-  override val runtimeDependencies = maybeTargetLengthEv.toList.toArray
+  override val runtimeDependencies = maybeTargetLengthEv.toArray
 
   private def suspendableExpression =
     new ElementOVCSpecifiedLengthUnparserSuspendableExpression(this, expr)
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 549f7a3c0..e5efbdd00 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 val runtimeDependencies = maybeUnparserTargetLengthInBitsEv.toList.toArray
+  override final val runtimeDependencies = maybeUnparserTargetLengthInBitsEv.toArray
 
   final override def childProcessors = Vector(vUnparser)
 
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 a3611b512..1689eb81e 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 val runtimeDependencies = maybeOutputNewLineEv.toList.toArray
+  override val runtimeDependencies = maybeOutputNewLineEv.toArray
 
   override protected def compute(state: ParseOrUnparseState): String = {
     val endMarker = "__daffodil_stringLiteralForUnparser_endMarker__"