1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-11-08 19:46:02 +01:00

Merge pull request #14378 from Radvendii/parser-improvements

parser.y: remove some unnecessary copies
This commit is contained in:
John Ericson 2025-10-27 19:11:11 +00:00 committed by GitHub
commit 8e6b69de54
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -345,8 +345,8 @@ string_parts
string_parts_interpolated string_parts_interpolated
: string_parts_interpolated STR : string_parts_interpolated STR
{ $$ = $1; $$.emplace_back(state->at(@2), new ExprString(state->alloc, $2)); } { $$ = std::move($1); $$.emplace_back(state->at(@2), new ExprString(state->alloc, $2)); }
| string_parts_interpolated DOLLAR_CURLY expr '}' { $$ = $1; $$.emplace_back(state->at(@2), $3); } | string_parts_interpolated DOLLAR_CURLY expr '}' { $$ = std::move($1); $$.emplace_back(state->at(@2), $3); }
| DOLLAR_CURLY expr '}' { $$.emplace_back(state->at(@1), $2); } | DOLLAR_CURLY expr '}' { $$.emplace_back(state->at(@1), $2); }
| STR DOLLAR_CURLY expr '}' { | STR DOLLAR_CURLY expr '}' {
$$.emplace_back(state->at(@1), new ExprString(state->alloc, $1)); $$.emplace_back(state->at(@1), new ExprString(state->alloc, $1));
@ -391,8 +391,8 @@ path_start
; ;
ind_string_parts ind_string_parts
: ind_string_parts IND_STR { $$ = $1; $$.emplace_back(state->at(@2), $2); } : ind_string_parts IND_STR { $$ = std::move($1); $$.emplace_back(state->at(@2), $2); }
| ind_string_parts DOLLAR_CURLY expr '}' { $$ = $1; $$.emplace_back(state->at(@2), $3); } | ind_string_parts DOLLAR_CURLY expr '}' { $$ = std::move($1); $$.emplace_back(state->at(@2), $3); }
| { } | { }
; ;
@ -440,11 +440,11 @@ binds1
; ;
attrs attrs
: attrs attr { $$ = $1; $$.emplace_back(AttrName(state->symbols.create($2)), state->at(@2)); } : attrs attr { $$ = std::move($1); $$.emplace_back(state->symbols.create($2), state->at(@2)); }
| attrs string_attr | attrs string_attr
{ $$ = $1; { $$ = std::move($1);
std::visit(overloaded { std::visit(overloaded {
[&](std::string_view str) { $$.emplace_back(AttrName(state->symbols.create(str)), state->at(@2)); }, [&](std::string_view str) { $$.emplace_back(state->symbols.create(str), state->at(@2)); },
[&](Expr * expr) { [&](Expr * expr) {
throw ParseError({ throw ParseError({
.msg = HintFmt("dynamic attributes not allowed in inherit"), .msg = HintFmt("dynamic attributes not allowed in inherit"),
@ -457,20 +457,20 @@ attrs
; ;
attrpath attrpath
: attrpath '.' attr { $$ = $1; $$.push_back(AttrName(state->symbols.create($3))); } : attrpath '.' attr { $$ = std::move($1); $$.emplace_back(state->symbols.create($3)); }
| attrpath '.' string_attr | attrpath '.' string_attr
{ $$ = $1; { $$ = std::move($1);
std::visit(overloaded { std::visit(overloaded {
[&](std::string_view str) { $$.push_back(AttrName(state->symbols.create(str))); }, [&](std::string_view str) { $$.emplace_back(state->symbols.create(str)); },
[&](Expr * expr) { $$.push_back(AttrName(expr)); } [&](Expr * expr) { $$.emplace_back(expr); }
}, $3); }, std::move($3));
} }
| attr { $$.push_back(AttrName(state->symbols.create($1))); } | attr { $$.emplace_back(state->symbols.create($1)); }
| string_attr | string_attr
{ std::visit(overloaded { { std::visit(overloaded {
[&](std::string_view str) { $$.push_back(AttrName(state->symbols.create(str))); }, [&](std::string_view str) { $$.emplace_back(state->symbols.create(str)); },
[&](Expr * expr) { $$.push_back(AttrName(expr)); } [&](Expr * expr) { $$.emplace_back(expr); }
}, $1); }, std::move($1));
} }
; ;
@ -480,7 +480,7 @@ attr
; ;
string_attr string_attr
: '"' string_parts '"' { $$ = $2; } : '"' string_parts '"' { $$ = std::move($2); }
| DOLLAR_CURLY expr '}' { $$ = $2; } | DOLLAR_CURLY expr '}' { $$ = $2; }
; ;