private def sequenceChild()

in daffodil-core/src/main/scala/org/apache/daffodil/core/grammar/SequenceGrammarMixin.scala [121:197]


  private def sequenceChild(child: Term, groupIndex: Int): SequenceChild = {
    import columnConstants._

    val (max, min, ock) = child match {
      case e: EB =>
        // don't require OCK unnecessarily
        (e.maxOccurs, e.minOccurs, if (e.isScalar) null else e.occursCountKind)
      case _ => (1, 1, null)
    }
    // don't require SSP unnecessarily
    val ssp =
      if (!hasSeparator)
        SeparatorSuppressionPolicy.AnyEmpty
      else
        separatorSuppressionPolicy

    val res = (child, sequenceKind, ssp, ock, min, max) match {
      case (e: EB, Ordered__, ___________, __________, ONE, ONE) =>
        new ScalarOrderedSequenceChild(this, e, groupIndex)
      case (e: EB, _________, ___________, StopValue_, ___, __2) =>
        e.subsetError("dfdl:occursCountKind 'stopValue' is not supported.")
      case (e: EB, Ordered__, ___________, Parsed____, ___, __2) =>
        new RepOrderedWithMinMaxSequenceChild(this, e, groupIndex)
      case (e: EB, Ordered__, ___________, Fixed_____, ___, UNB) =>
        e.SDE("occursCountKind='fixed' not allowed with unbounded maxOccurs")
      case (e: EB, Ordered__, Never______, Implicit__, ___, UNB)
          if !e.isLastDeclaredRepresentedInSequence =>
        unboundedPositionalError(e)
      case (e: EB, Ordered__, Trailing___, Implicit__, ___, UNB)
          if !e.isLastDeclaredRepresentedInSequence =>
        unboundedPositionalError(e)
      case (e: EB, Ordered__, TrailingStr, Implicit__, ___, UNB)
          if !e.isLastDeclaredRepresentedInSequence =>
        unboundedPositionalError(e)
      case (e: EB, Ordered__, ___________, Fixed_____, ___, `min`) =>
        new RepOrderedExactlyNSequenceChild(this, e, groupIndex, min)
      case (e: EB, Ordered__, ___________, Fixed_____, ___, max) => {
        Assert.invariant(min != max);
        e.SDE(
          "occursCountKind='fixed' requires minOccurs and maxOccurs to be equal (%d != %d)",
          min,
          max
        )
      }
      case (e: EB, Ordered__, ___________, Expression, ___, __2) =>
        new RepOrderedExpressionOccursCountSequenceChild(this, e, groupIndex)
      case (e: EB, Ordered__, Never______, Implicit__, ___, UNB) =>
        e.SDE(
          "separatorSuppressionPolicy='never' with occursCountKind='implicit' requires bounded maxOccurs."
        )
      case (e: EB, Ordered__, Never______, Implicit__, ___, max) =>
        new RepOrderedWithMinMaxSequenceChild(this, e, groupIndex)
      case (e: EB, Ordered__, Trailing___, Implicit__, ___, max) =>
        new RepOrderedWithMinMaxSequenceChild(this, e, groupIndex)
      case (e: EB, Ordered__, TrailingStr, Implicit__, ___, UNB) =>
        new RepOrderedWithMinMaxSequenceChild(this, e, groupIndex)
      case (e: EB, Ordered__, TrailingStr, Implicit__, ___, max) =>
        new RepOrderedWithMinMaxSequenceChild(this, e, groupIndex)
      case (e: EB, Ordered__, Always_____, Implicit__, ___, max) =>
        new RepOrderedWithMinMaxSequenceChild(this, e, groupIndex)
      case (e: EB, Unordered, ___________, __________, ONE, ONE) =>
        new ScalarOrderedSequenceChild(this, e, groupIndex)
      case (e: EB, Unordered, ___________, Parsed____, ___, __2) =>
        new RepOrderedWithMinMaxSequenceChild(this, e, groupIndex)
      case (e: EB, Unordered, ___________, __________, ___, __2) =>
        e.SDE("When sequenceKind='unordered', occursCountKind must be 'parsed'")
      case (m: MG, Unordered, ___________, __________, ___, __2) =>
        child.SDE("All memebers of an unordered sequence must be Element or ElemenntRef")
      case (m: MG, _________, ___________, __________, ___, __2) =>
        new ScalarOrderedSequenceChild(this, m, groupIndex)
      case (_____, _________, policy /**/, ock /**/, ___, __2) =>
        child.SDE(
          "separatorSuppressionPolicy='" + policy + "' not allowed with occursCountKind='" + ock + "'."
        )
    }
    res
  }