mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-25 23:36:16 +02:00
parser.y: move attr doc setting into addAttr
This commit is contained in:
parent
429a197d24
commit
b0a8430e85
2 changed files with 10 additions and 14 deletions
|
@ -86,7 +86,7 @@ struct ParserState
|
||||||
|
|
||||||
void dupAttr(const AttrPath & attrPath, const PosIdx pos, const PosIdx prevPos);
|
void dupAttr(const AttrPath & attrPath, const PosIdx pos, const PosIdx prevPos);
|
||||||
void dupAttr(Symbol attr, const PosIdx pos, const PosIdx prevPos);
|
void dupAttr(Symbol attr, const PosIdx pos, const PosIdx prevPos);
|
||||||
void addAttr(ExprAttrs * attrs, AttrPath && attrPath, Expr * e, const PosIdx pos);
|
void addAttr(ExprAttrs * attrs, AttrPath && attrPath, const ParserLocation & loc, Expr * e, const ParserLocation & exprLoc);
|
||||||
Formals * validateFormals(Formals * formals, PosIdx pos = noPos, Symbol arg = {});
|
Formals * validateFormals(Formals * formals, PosIdx pos = noPos, Symbol arg = {});
|
||||||
Expr * stripIndentation(const PosIdx pos,
|
Expr * stripIndentation(const PosIdx pos,
|
||||||
std::vector<std::pair<PosIdx, std::variant<Expr *, StringToken>>> && es);
|
std::vector<std::pair<PosIdx, std::variant<Expr *, StringToken>>> && es);
|
||||||
|
@ -110,11 +110,12 @@ inline void ParserState::dupAttr(Symbol attr, const PosIdx pos, const PosIdx pre
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void ParserState::addAttr(ExprAttrs * attrs, AttrPath && attrPath, Expr * e, const PosIdx pos)
|
inline void ParserState::addAttr(ExprAttrs * attrs, AttrPath && attrPath, const ParserLocation & loc, Expr * e, const ParserLocation & exprLoc)
|
||||||
{
|
{
|
||||||
AttrPath::iterator i;
|
AttrPath::iterator i;
|
||||||
// All attrpaths have at least one attr
|
// All attrpaths have at least one attr
|
||||||
assert(!attrPath.empty());
|
assert(!attrPath.empty());
|
||||||
|
auto pos = at(loc);
|
||||||
// Checking attrPath validity.
|
// Checking attrPath validity.
|
||||||
// ===========================
|
// ===========================
|
||||||
for (i = attrPath.begin(); i + 1 < attrPath.end(); i++) {
|
for (i = attrPath.begin(); i + 1 < attrPath.end(); i++) {
|
||||||
|
@ -179,6 +180,12 @@ inline void ParserState::addAttr(ExprAttrs * attrs, AttrPath && attrPath, Expr *
|
||||||
} else {
|
} else {
|
||||||
attrs->dynamicAttrs.push_back(ExprAttrs::DynamicAttrDef(i->expr, e, pos));
|
attrs->dynamicAttrs.push_back(ExprAttrs::DynamicAttrDef(i->expr, e, pos));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto it = lexerState.positionToDocComment.find(pos);
|
||||||
|
if (it != lexerState.positionToDocComment.end()) {
|
||||||
|
e->setDocComment(it->second);
|
||||||
|
lexerState.positionToDocComment.emplace(at(exprLoc), it->second);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Formals * ParserState::validateFormals(Formals * formals, PosIdx pos, Symbol arg)
|
inline Formals * ParserState::validateFormals(Formals * formals, PosIdx pos, Symbol arg)
|
||||||
|
|
|
@ -366,18 +366,7 @@ ind_string_parts
|
||||||
binds
|
binds
|
||||||
: binds[accum] attrpath '=' expr ';' {
|
: binds[accum] attrpath '=' expr ';' {
|
||||||
$$ = $accum;
|
$$ = $accum;
|
||||||
|
state->addAttr($$, std::move(*$attrpath), @attrpath, $expr, @expr);
|
||||||
auto pos = state->at(@attrpath);
|
|
||||||
auto exprPos = state->at(@expr);
|
|
||||||
{
|
|
||||||
auto it = state->lexerState.positionToDocComment.find(pos);
|
|
||||||
if (it != state->lexerState.positionToDocComment.end()) {
|
|
||||||
$expr->setDocComment(it->second);
|
|
||||||
state->lexerState.positionToDocComment.emplace(exprPos, it->second);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
state->addAttr($$, std::move(*$attrpath), $expr, pos);
|
|
||||||
delete $attrpath;
|
delete $attrpath;
|
||||||
}
|
}
|
||||||
| binds[accum] INHERIT attrs ';'
|
| binds[accum] INHERIT attrs ';'
|
||||||
|
|
Loading…
Reference in a new issue