40 const File*
import(std::string_view sv,
Tok::Tag tag = Tok::Tag::K_import) {
41 return import({Loc(),
driver().sym(sv)},
false, tag,
nullptr);
46 import(Dbg,
bool is_path,
Tok::Tag tag = Tok::Tag::K_import, std::ostream* md =
nullptr,
bool record =
true);
47 const File*
import(
const fe::Src&, std::ostream* md =
nullptr, Loc = {});
51 const File*
import(std::istream& is, fs::path path, Loc = {}, std::ostream* md =
nullptr);
52 const File*
import_main(std::string_view input, fe::View<std::string> plugins, std::ostream* md =
nullptr);
55 template<
class T,
class... Args>
56 auto ptr(Args&&... args) {
57 return ast_.
ptr<
const T>(std::forward<Args>(args)...);
61 Loc missing()
const {
return curr_.anew_end(); }
66 Dbg parse_id(fe::Cite ctxt = {});
72 fs::path curr_dir()
const {
return curr_.src ? curr_.src->path().parent_path() : fs::path(); }
75 Ptr<Expr> path_expr(Dbg dbg) {
return ptr<PathExpr>(path(dbg)); }
77 void parse_list(fe::Cite ctxt,
Tok::Tag delim_l, std::invocable
auto f,
Tok::Tag sep = Tok::Tag::T_comma) {
79 auto _ = anchor(expect(delim_l, ctxt), delim_r);
82 if (ahead().isa(delim_r))
break;
85 }
while (accept(sep));
86 expect(delim_r,
"closing delimiter of a {}", ctxt);
98 template<
class... Args>
99 Ptr<Expr> parse_expr(fe::cite_string<Args...> fmt, Args&&... args) {
100 return parse_expr(fe::format_cite(fmt, std::forward<Args>(args)...));
104 template<
class... Args>
105 Ptr<Expr> parse_expr(
Prec prec, fe::cite_string<Args...> fmt, Args&&... args) {
106 return parse_expr(fe::format_cite(fmt, std::forward<Args>(args)...), prec);
108 Ptr<Expr> parse_primary_expr(fe::Cite ctxt);
140 bool implicit =
false;
143 Ptr<Ptrn> parse_ptrn(PtrnStyle, fe::Cite ctxt,
Prec = Prec::Bot);
146 template<
class... Args>
147 Ptr<Ptrn> parse_ptrn(PtrnStyle style,
Prec prec, fe::cite_string<Args...> fmt, Args&&... args) {
148 return parse_ptrn(style, fe::format_cite(fmt, std::forward<Args>(args)...), prec);
150 Ptr<Ptrn> parse_ptrn_(PtrnStyle, fe::Cite ctxt,
Prec = Prec::Bot);
154 Ptr<IdPtrn> anon_ptrn(Loc loc,
Ptr<Expr> type) {
return ptr<IdPtrn>(loc, Dbg(loc.anew_begin()), type); }
164 Mods parse_modifiers();
168 void check_no_extern(
const Mods&, fe::Cite entity);
172 std::tuple<Ptr<Expr>, Dbg, Tok, Tok> parse_axm_tail();
185 Lexer* lexer_ =
nullptr;