         try
             return super
         catch error
-            unless /Parsing halted/.test error.message
-                throw error
+            throw error unless /Parsing halted/.test error.message
             @report_error error.message
 
     # Add a `.yylloc` to lexer.


exports.CoffeeScriptParser = CoffeeScriptParser

exports.nodes = (source, config) ->
    return (new CoffeeScriptParser(config)).nodes(source)

exports.compile = (source, config) ->
    return (new CoffeeScriptParser(config)).compile(source)

exports.parse = (source, root, config) ->
    return (new CoffeeScriptParser(config)).parse(source, root)

        for key of default_config when not @config[key]?
            @config[key] = default_config[key]

        @lexer =  new (
                  if config.showDoccoHeadings then DoccoHeadingLexer else Lexer
                  ) @report_error
        @parser = new Parser(@report_error)

    # ### API / "public" methods
    tokens: (source) ->
        @failed = no
        source = String source  # make sure it's a javascript string
        try
            return @lexer.tokenize source,
                line:   @config.line,
                column: @config.column
        catch error
            @failed = yes
            @log_error "Lexer error: #{error}"
            return []

    nodes: (source) ->
        try
            return @parser.parse @tokens source
        catch error
            @failed = yes
            @log_error "Parser error: #{error?.stack}"
            return null

    compile: (source) ->
        ast = @nodes source
        if ast and not @failed
            try
