This is an automated email from the ASF dual-hosted git repository.
jadams 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 62d7bbe Improve diagnostic for no forward progress
62d7bbe is described below
commit 62d7bbe69847d85c780f40855c5cfef29a5a7c23
Author: Josh Adams <[email protected]>
AuthorDate: Thu Feb 17 11:29:30 2022 -0500
Improve diagnostic for no forward progress
Improved diagnostic message now contains reference to the array and
describes how it is stuck in an infinite loop.
DAFFODIL-2576
---
.../org/apache/daffodil/processors/parsers/SequenceChildBases.scala | 2 +-
.../org/apache/daffodil/processors/parsers/SequenceParserBases.scala | 5 +++--
test-stdLayout/src/test/resources/org1/testStdLayout.tdml | 4 +++-
3 files changed, 7 insertions(+), 4 deletions(-)
diff --git
a/daffodil-runtime1/src/main/scala/org/apache/daffodil/processors/parsers/SequenceChildBases.scala
b/daffodil-runtime1/src/main/scala/org/apache/daffodil/processors/parsers/SequenceChildBases.scala
index 648cd52..ad591f0 100644
---
a/daffodil-runtime1/src/main/scala/org/apache/daffodil/processors/parsers/SequenceChildBases.scala
+++
b/daffodil-runtime1/src/main/scala/org/apache/daffodil/processors/parsers/SequenceChildBases.scala
@@ -197,7 +197,7 @@ abstract class SequenceChildParser(
val childParser: Parser,
val srd: SequenceRuntimeData,
val trd: TermRuntimeData)
- extends CombinatorParser(srd) {
+ extends CombinatorParser(trd) {
override def childProcessors: Vector[Processor] = Vector(childParser)
diff --git
a/daffodil-runtime1/src/main/scala/org/apache/daffodil/processors/parsers/SequenceParserBases.scala
b/daffodil-runtime1/src/main/scala/org/apache/daffodil/processors/parsers/SequenceParserBases.scala
index 47d3538..80e9daf 100644
---
a/daffodil-runtime1/src/main/scala/org/apache/daffodil/processors/parsers/SequenceParserBases.scala
+++
b/daffodil-runtime1/src/main/scala/org/apache/daffodil/processors/parsers/SequenceParserBases.scala
@@ -57,12 +57,13 @@ abstract class SequenceParserBase(
final protected def checkForwardProgress(
pstate: PState,
+ parser: RepeatingChildParser,
currentPos: Long,
priorPos: Long,
ais: ArrayIndexStatus): ArrayIndexStatus = {
Assert.invariant(currentPos >= priorPos)
if (currentPos == priorPos && pstate.groupPos > 1) {
- PE(pstate, "No forward progress.")
+ parser.PE(pstate, "Array element parsed succesfully, but consumed no
data and is stuck in an infinite loop as it is unbounded.")
Done
} else {
ais
@@ -173,7 +174,7 @@ abstract class SequenceParserBase(
// result of try could also be absent if we just ended a group
// by not finding a separator
//
- ais = checkForwardProgress(pstate, currentPos, priorPos, ais)
+ ais = checkForwardProgress(pstate, parser, currentPos,
priorPos, ais)
}
//
// advance array position.
diff --git a/test-stdLayout/src/test/resources/org1/testStdLayout.tdml
b/test-stdLayout/src/test/resources/org1/testStdLayout.tdml
index 0207ac3..19e1baa 100644
--- a/test-stdLayout/src/test/resources/org1/testStdLayout.tdml
+++ b/test-stdLayout/src/test/resources/org1/testStdLayout.tdml
@@ -34,7 +34,9 @@
<tdml:documentPart
type="file">org1/test-outer-data1.txt</tdml:documentPart>
</tdml:document>
<tdml:errors>
- <tdml:error>No forward progress</tdml:error>
+ <tdml:error>consumed no data</tdml:error>
+ <tdml:error>infinite loop</tdml:error>
+ <tdml:error>inner:Inner</tdml:error>
</tdml:errors>
</tdml:parserTestCase>