Github user VTGuy commented on a diff in the pull request:
https://github.com/apache/incubator-daffodil/pull/4#discussion_r153520857
--- Diff:
daffodil-runtime1/src/main/scala/edu/illinois/ncsa/daffodil/processors/parsers/Parser.scala
---
@@ -189,76 +193,107 @@ class AltCompParser(context: RuntimeData, val
childParsers: Seq[Parser])
def parse(pstate: PState): Unit = {
var pBefore: PState.Mark = null
+ var markLeakCausedByException = false;
- pstate.pushDiscriminator
- var diagnostics: Seq[Diagnostic] = Nil
- var i = 0
- var parser: Parser = null
- val limit = childParsers.length
- var returnFlag = false
- while (!returnFlag && i < limit) {
- parser = childParsers(i)
- i += 1
- log(LogLevel.Debug, "Trying choice alternative: %s", parser)
- pBefore = pstate.mark("AltCompParser1")
- try {
- parser.parse1(pstate)
- } catch {
- case d: SchemaDefinitionDiagnosticBase => {
- pstate.discard(pBefore)
- throw d
+ try {
+ pstate.pushDiscriminator
+ var diagnostics: Seq[Diagnostic] = Nil
+ var i = 0
+ var parser: Parser = null
+ val limit = childParsers.length
+ var returnFlag = false
+ while (!returnFlag && i < limit) {
+ parser = childParsers(i)
+ i += 1
+ log(LogLevel.Debug, "Trying choice alternative: %s", parser)
+ pBefore = pstate.mark("AltCompParser1")
+ try {
+ parser.parse1(pstate)
+ } catch {
+ case d: SchemaDefinitionDiagnosticBase => {
+ pstate.discard(pBefore)
+ pBefore = null
--- End diff --
Every time we do a pstate.discard(pBefore) do you set pBefore to null?
Just wondering if this is something that should take place in 'discard' or not.
---