9#ifndef FORTRAN_PARSER_SOURCE_H_
10#define FORTRAN_PARSER_SOURCE_H_
17#include "characters.h"
18#include "flang/Common/reference.h"
19#include "llvm/Support/MemoryBuffer.h"
20#include "llvm/Support/raw_ostream.h"
36std::string DirectoryName(std::string path);
37std::optional<std::string> LocateSourceFile(
38 std::string name,
const std::list<std::string> &searchPath);
39std::vector<std::string> LocateSourceFileAll(
40 std::string name,
const std::vector<std::string> &searchPath);
54 explicit SourceFile(Encoding e) : encoding_{e} {}
56 const std::string &path()
const {
return path_; }
58 return buf_->getBuffer().slice(bom_end_, buf_end_ - bom_end_);
60 std::size_t bytes()
const {
return content().size(); }
61 std::size_t lines()
const {
return lineStart_.size(); }
62 Encoding encoding()
const {
return encoding_; }
64 bool Open(std::string path, llvm::raw_ostream &error);
65 bool ReadStandardInput(llvm::raw_ostream &error);
68 std::size_t GetLineStartOffset(
int lineNumber)
const {
69 return lineStart_.at(lineNumber - 1);
71 const std::string &SavePath(std::string &&);
72 void LineDirective(
int trueLineNumber,
const std::string &,
int);
73 llvm::raw_ostream &Dump(llvm::raw_ostream &)
const;
76 struct SourcePositionOrigin {
77 const std::string &path;
82 void IdentifyPayload();
83 void RecordLineStarts();
86 std::unique_ptr<llvm::WritableMemoryBuffer> buf_;
87 std::vector<std::size_t> lineStart_;
88 std::size_t bom_end_{0};
91 std::set<std::string> distinctPaths_;
92 std::map<std::size_t, SourcePositionOrigin> origins_;
Definition: reference.h:18
Definition: check-expression.h:19