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.


---

Reply via email to