anchor.diff:                              else
                                   Some(r.GetCOMObject(wb.Application))
                            ) refs |> List.choose id |> Seq.ofList
  -//            | None -> raise (ParseException(formula))
  -            | None -> Seq.empty    // just ignore parse exceptions for now
  +            | None,false -> raise (ParseException(formula))
  +            | None,true -> Seq.empty    // just ignore parse exceptions for now
           with
           | :? AST.IndirectAddressingNotSupportedException -> seq[]
   
  
positive.code:                 let a_path = a.A1Path()
                  a_path = path
              ) refs
          | None -> raise (ParseException formula)
  
      // This is the one you want to call from user code
      let ParseFormula(str, path, wb, ws): AST.Expression =
  
negative.code:         | :? AST.ReferenceFunction as r -> [r.FunctionName]
          | _ -> []
  
      let GetSCFormulaNames(formula: string, path: string, ws: Worksheet, wb: Workbook, ignore_parse_errors: bool) =
          let app = wb.Application
          let path' = System.IO.Path.GetDirectoryName(wb.FullName)
          match ExcelParser.ParseFormula(formula, path', wb, ws),ignore_parse_errors with
          | Some(ast),_ -> GetFormulaNamesFromExpr(ast) |> Seq.ofList
          | None,false -> raise (ParseException formula)
          | None,true -> Seq.empty    // just ignore parse exceptions for now
  
      let GetSingleCellReferencesFromFormula(formula: string, wb: Workbook, ws: Worksheet, ignore_parse_errors: bool) : seq<AST.Address> =
          let app = wb.Application
          let path = System.IO.Path.GetDirectoryName(wb.FullName)
          match ExcelParser.ParseFormula(formula, path, wb, ws),ignore_parse_errors with
          | Some(tree),_ ->
              // temporarily bail if a refers to object in a different workbook
              // TODO: we should open the other workbook and continue the analysis
              let refs = GetSCExprRanges(tree) |> Seq.ofList
  