mirror of
https://github.com/NixOS/nix.git
synced 2025-11-08 11:36:03 +01:00
Merge pull request #14379 from Radvendii/exprlist-alloc
libexpr: store ExprList data in Exprs::alloc
This commit is contained in:
commit
ac8b1efcf9
2 changed files with 13 additions and 7 deletions
|
|
@ -442,8 +442,14 @@ struct ExprAttrs : Expr
|
||||||
|
|
||||||
struct ExprList : Expr
|
struct ExprList : Expr
|
||||||
{
|
{
|
||||||
std::vector<Expr *> elems;
|
std::span<Expr *> elems;
|
||||||
ExprList() {};
|
|
||||||
|
ExprList(std::pmr::polymorphic_allocator<char> & alloc, std::vector<Expr *> exprs)
|
||||||
|
: elems({alloc.allocate_object<Expr *>(exprs.size()), exprs.size()})
|
||||||
|
{
|
||||||
|
std::ranges::copy(exprs, elems.begin());
|
||||||
|
};
|
||||||
|
|
||||||
COMMON_METHODS
|
COMMON_METHODS
|
||||||
Value * maybeThunk(EvalState & state, Env & env) override;
|
Value * maybeThunk(EvalState & state, Env & env) override;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -129,7 +129,7 @@ static Expr * makeCall(PosIdx pos, Expr * fn, Expr * arg) {
|
||||||
%type <nix::Expr *> start expr expr_function expr_if expr_op
|
%type <nix::Expr *> start expr expr_function expr_if expr_op
|
||||||
%type <nix::Expr *> expr_select expr_simple expr_app
|
%type <nix::Expr *> expr_select expr_simple expr_app
|
||||||
%type <nix::Expr *> expr_pipe_from expr_pipe_into
|
%type <nix::Expr *> expr_pipe_from expr_pipe_into
|
||||||
%type <nix::ExprList *> expr_list
|
%type <std::vector<Expr *>> list
|
||||||
%type <nix::ExprAttrs *> binds binds1
|
%type <nix::ExprAttrs *> binds binds1
|
||||||
%type <nix::Formals *> formals formal_set
|
%type <nix::Formals *> formals formal_set
|
||||||
%type <nix::Formal> formal
|
%type <nix::Formal> formal
|
||||||
|
|
@ -334,7 +334,7 @@ expr_simple
|
||||||
{ $2->pos = CUR_POS; $$ = $2; }
|
{ $2->pos = CUR_POS; $$ = $2; }
|
||||||
| '{' '}'
|
| '{' '}'
|
||||||
{ $$ = new ExprAttrs(CUR_POS); }
|
{ $$ = new ExprAttrs(CUR_POS); }
|
||||||
| '[' expr_list ']' { $$ = $2; }
|
| '[' list ']' { $$ = new ExprList(state->alloc, std::move($2)); }
|
||||||
;
|
;
|
||||||
|
|
||||||
string_parts
|
string_parts
|
||||||
|
|
@ -484,9 +484,9 @@ string_attr
|
||||||
| DOLLAR_CURLY expr '}' { $$ = $2; }
|
| DOLLAR_CURLY expr '}' { $$ = $2; }
|
||||||
;
|
;
|
||||||
|
|
||||||
expr_list
|
list
|
||||||
: expr_list expr_select { $$ = $1; $1->elems.push_back($2); /* !!! dangerous */; $2->warnIfCursedOr(state->symbols, state->positions); }
|
: list expr_select { $$ = std::move($1); $$.push_back($2); /* !!! dangerous */; $2->warnIfCursedOr(state->symbols, state->positions); }
|
||||||
| { $$ = new ExprList; }
|
| { }
|
||||||
;
|
;
|
||||||
|
|
||||||
formal_set
|
formal_set
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue