@@ -131,7 +131,7 @@ static Expr * makeCall(PosIdx pos, Expr * fn, Expr * arg) {
131131%type <nix::Expr *> expr_pipe_from expr_pipe_into
132132%type <std::vector<Expr *> > list
133133%type <nix::ExprAttrs *> binds binds1
134- %type <nix::Formals * > formals formal_set
134+ %type <nix::FormalsBuilder > formals formal_set
135135%type <nix::Formal> formal
136136%type <std::vector<nix::AttrName> > attrpath
137137%type <std::vector<std::pair<nix::AttrName, nix::PosIdx> >> attrs
@@ -179,26 +179,30 @@ expr: expr_function;
179179
180180expr_function
181181 : ID ':' expr_function
182- { auto me = new ExprLambda(CUR_POS, state->symbols.create($1), 0, $3);
182+ { auto me = new ExprLambda(CUR_POS, state->symbols.create($1), $3);
183183 $$ = me;
184184 SET_DOC_POS(me, @1);
185185 }
186186 | formal_set ':' expr_function[body]
187- { auto me = new ExprLambda(CUR_POS, state->validateFormals($formal_set), $body);
187+ {
188+ state->validateFormals($formal_set);
189+ auto me = new ExprLambda(state->alloc, CUR_POS, std::move($formal_set), $body);
188190 $$ = me;
189191 SET_DOC_POS(me, @1);
190192 }
191193 | formal_set '@' ID ':' expr_function[body]
192194 {
193195 auto arg = state->symbols.create($ID);
194- auto me = new ExprLambda(CUR_POS, arg, state->validateFormals($formal_set, CUR_POS, arg), $body);
196+ state->validateFormals($formal_set, CUR_POS, arg);
197+ auto me = new ExprLambda(state->alloc, CUR_POS, arg, std::move($formal_set), $body);
195198 $$ = me;
196199 SET_DOC_POS(me, @1);
197200 }
198201 | ID '@' formal_set ':' expr_function[body]
199202 {
200203 auto arg = state->symbols.create($ID);
201- auto me = new ExprLambda(CUR_POS, arg, state->validateFormals($formal_set, CUR_POS, arg), $body);
204+ state->validateFormals($formal_set, CUR_POS, arg);
205+ auto me = new ExprLambda(state->alloc, CUR_POS, arg, std::move($formal_set), $body);
202206 $$ = me;
203207 SET_DOC_POS(me, @1);
204208 }
@@ -490,18 +494,18 @@ list
490494 ;
491495
492496formal_set
493- : '{' formals ',' ELLIPSIS '}' { $$ = $formals; $$-> ellipsis = true; }
494- | '{' ELLIPSIS '}' { $$ = new Formals; $$-> ellipsis = true; }
495- | '{' formals ',' '}' { $$ = $formals; $$-> ellipsis = false; }
496- | '{' formals '}' { $$ = $formals; $$-> ellipsis = false; }
497- | '{' '}' { $$ = new Formals; $$-> ellipsis = false; }
497+ : '{' formals ',' ELLIPSIS '}' { $$ = std::move( $formals); $$. ellipsis = true; }
498+ | '{' ELLIPSIS '}' { $$. ellipsis = true; }
499+ | '{' formals ',' '}' { $$ = std::move( $formals); $$. ellipsis = false; }
500+ | '{' formals '}' { $$ = std::move( $formals); $$. ellipsis = false; }
501+ | '{' '}' { $$. ellipsis = false; }
498502 ;
499503
500504formals
501505 : formals[accum] ',' formal
502- { $$ = $accum; $$-> formals.emplace_back(std::move($formal)); }
506+ { $$ = std::move( $accum) ; $$. formals.emplace_back(std::move($formal)); }
503507 | formal
504- { $$ = new Formals; $$-> formals.emplace_back(std::move($formal)); }
508+ { $$. formals.emplace_back(std::move($formal)); }
505509 ;
506510
507511formal
0 commit comments