blob: ae0e932147f59b9ffd857b33e70a74ca64030a32 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
// Parser utilities for use in parser.y
#pragma once
// TODO(tazjin): Audit these includes, they were in parser.y
#include <optional>
#include <variant>
#include <glog/logging.h>
#include "libexpr/eval.hh"
#include "libexpr/nixexpr.hh"
#include "libutil/util.hh"
#define YY_DECL \
int yylex(YYSTYPE* yylval_param, YYLTYPE* yylloc_param, yyscan_t yyscanner, \
nix::ParseData* data)
namespace nix {
struct ParseData {
EvalState& state;
SymbolTable& symbols;
Expr* result;
Path basePath;
std::optional<Symbol> path;
std::string error;
Symbol sLetBody;
ParseData(EvalState& state)
: state(state),
symbols(state.symbols),
sLetBody(symbols.Create("<let-body>")){};
};
// TODO(tazjin): move dupAttr to anonymous namespace
static void dupAttr(const AttrPath& attrPath, const Pos& pos,
const Pos& prevPos) {
throw ParseError(format("attribute '%1%' at %2% already defined at %3%") %
showAttrPath(attrPath) % pos % prevPos);
}
static void dupAttr(Symbol attr, const Pos& pos, const Pos& prevPos) {
throw ParseError(format("attribute '%1%' at %2% already defined at %3%") %
attr % pos % prevPos);
}
} // namespace nix
|