     subparser = new @class
     {originalMatchLength, parentNode, sourceMap, originalOffset} = options
     options.parentParser = @
+    options.sourceFile = @options.sourceFile
     if match = subparser.parse subsource, merge(options, isSubparse: true, logParsingFailures: @_logParsingFailures)
       {offset, matchLength, source, parser} = match
       match.subparseInfo = {offset, matchLength, source, parser}

  generateCompileError: (options) ->
      {message, info, rootParseTreeNode} = options

      new CaffeineEightCompileError(
        compactFlatten([
          if rootParseTreeNode?.matchLength < @_source.length

      {failureOffset, failureIndex = @_failureIndex, verbose, errorType = "Parsing"} = options
      throw new Error "DEPRICATED: failureOffset" if failureOffset?

      if @parentParser
        @rootParser.getParseFailureInfo {
          failureIndex: @offsetInRootParserSource failureIndex
          verbose
          errorType
        }

      else
        compactFlatten([
          ""
          @colorString "gray", "#{errorType} error at #{@colorString "red", @getFailureUrl failureIndex}"
          ""
          @colorString "gray", "Source:"
          @colorString "gray", "..."

          presentSourceLocation @_source,
            failureIndex
            @options

          @colorString "gray", "..."
          ""
          formattedInspect @expectingInfo, options
          if verbose
            formattedInspect ("partial-parse-tree": @partialParseTree), options
          ""
        ]).join "\n"

    partialParseTreeLeafNodes: ->
      return @_partialParseTreeNodes if @_partialParseTreeNodes
