@@ -142,11 +142,11 @@ or { return OR_KW; }
142142 return PIPE_INTO;
143143 }
144144
145- {ID } { yylval->id = { yytext, (size_t ) yyleng} ; return ID; }
145+ {ID } { yylval->emplace <StringToken>( yytext, (size_t ) yyleng) ; return ID; }
146146{INT } { errno = 0 ;
147147 std::optional<int64_t > numMay = string2Int<int64_t >(yytext);
148148 if (numMay.has_value ()) {
149- yylval->n = NixInt{ *numMay} ;
149+ yylval->emplace < NixInt>( *numMay) ;
150150 } else {
151151 throw ParseError (ErrorInfo{
152152 .msg = HintFmt (" invalid integer '%1%'" , yytext),
@@ -156,7 +156,7 @@ or { return OR_KW; }
156156 return INT_LIT;
157157 }
158158{FLOAT } { errno = 0 ;
159- yylval->nf = strtod (yytext, 0 );
159+ yylval->emplace <NixFloat>( strtod (yytext, 0 ) );
160160 if (errno != 0 )
161161 throw ParseError (ErrorInfo{
162162 .msg = HintFmt (" invalid float '%1%'" , yytext),
@@ -183,7 +183,7 @@ or { return OR_KW; }
183183 /* It is impossible to match strings ending with '$' with one
184184 regex because trailing contexts are only valid at the end
185185 of a rule. (A sane but undocumented limitation.) */
186- yylval->str = unescapeStr (yytext, yyleng, [&]() { return state->positions [CUR_POS]; });
186+ yylval->emplace <StringToken>( unescapeStr (yytext, yyleng, [&]() { return state->positions [CUR_POS]; }) );
187187 return STR;
188188 }
189189<STRING >\$\{ { PUSH_STATE (DEFAULT); return DOLLAR_CURLY; }
@@ -198,27 +198,27 @@ or { return OR_KW; }
198198
199199\'\' (\ * \n )? { PUSH_STATE (IND_STRING); return IND_STRING_OPEN; }
200200<IND_STRING >([^ \$\' ]| \$ [^ \{\' ]| \' [^ \'\$ ])+ {
201- yylval->str = { yytext, (size_t ) yyleng, true } ;
202- forceNoNullByte (yylval->str , [&]() { return state->positions [CUR_POS]; });
201+ yylval->emplace <StringToken>( yytext, (size_t ) yyleng, true ) ;
202+ forceNoNullByte (yylval->as <StringToken>() , [&]() { return state->positions [CUR_POS]; });
203203 return IND_STR;
204204 }
205205<IND_STRING >\'\'\$ |
206206<IND_STRING >\$ {
207- yylval->str = { " $" , 1 } ;
207+ yylval->emplace <StringToken>( " $" , 1 ) ;
208208 return IND_STR;
209209 }
210210<IND_STRING >\'\'\' {
211- yylval->str = { " ''" , 2 } ;
211+ yylval->emplace <StringToken>( " ''" , 2 ) ;
212212 return IND_STR;
213213 }
214214<IND_STRING >\'\'\\ {ANY } {
215- yylval->str = unescapeStr (yytext + 2 , yyleng - 2 , [&]() { return state->positions [CUR_POS]; });
215+ yylval->emplace <StringToken>( unescapeStr (yytext + 2 , yyleng - 2 , [&]() { return state->positions [CUR_POS]; }) );
216216 return IND_STR;
217217 }
218218<IND_STRING >\$\{ { PUSH_STATE (DEFAULT); return DOLLAR_CURLY; }
219219<IND_STRING >\'\' { POP_STATE (); return IND_STRING_CLOSE; }
220220<IND_STRING >\' {
221- yylval->str = { " '" , 1 } ;
221+ yylval->emplace <StringToken>( " '" , 1 ) ;
222222 return IND_STR;
223223 }
224224
@@ -232,14 +232,14 @@ or { return OR_KW; }
232232<PATH_START >{PATH_SEG } {
233233 POP_STATE ();
234234 PUSH_STATE (INPATH_SLASH);
235- yylval->path = { yytext, (size_t ) yyleng} ;
235+ yylval->emplace <StringToken>( yytext, (size_t ) yyleng) ;
236236 return PATH;
237237}
238238
239239<PATH_START >{HPATH_START } {
240240 POP_STATE ();
241241 PUSH_STATE (INPATH_SLASH);
242- yylval->path = { yytext, (size_t ) yyleng} ;
242+ yylval->emplace <StringToken>( yytext, (size_t ) yyleng) ;
243243 return HPATH;
244244}
245245
@@ -248,15 +248,15 @@ or { return OR_KW; }
248248 PUSH_STATE (INPATH_SLASH);
249249 else
250250 PUSH_STATE (INPATH);
251- yylval->path = { yytext, (size_t ) yyleng} ;
251+ yylval->emplace <StringToken>( yytext, (size_t ) yyleng) ;
252252 return PATH;
253253}
254254{HPATH } {
255255 if (yytext[yyleng-1 ] == ' /' )
256256 PUSH_STATE (INPATH_SLASH);
257257 else
258258 PUSH_STATE (INPATH);
259- yylval->path = { yytext, (size_t ) yyleng} ;
259+ yylval->emplace <StringToken>( yytext, (size_t ) yyleng) ;
260260 return HPATH;
261261}
262262
@@ -272,7 +272,7 @@ or { return OR_KW; }
272272 PUSH_STATE (INPATH_SLASH);
273273 else
274274 PUSH_STATE (INPATH);
275- yylval->str = { yytext, (size_t ) yyleng} ;
275+ yylval->emplace <StringToken>( yytext, (size_t ) yyleng) ;
276276 return STR;
277277}
278278<INPATH >{ANY } |
@@ -294,8 +294,8 @@ or { return OR_KW; }
294294 });
295295}
296296
297- {SPATH } { yylval->path = { yytext, (size_t ) yyleng} ; return SPATH; }
298- {URI } { yylval->uri = { yytext, (size_t ) yyleng} ; return URI; }
297+ {SPATH } { yylval->emplace <StringToken>( yytext, (size_t ) yyleng) ; return SPATH; }
298+ {URI } { yylval->emplace <StringToken>( yytext, (size_t ) yyleng) ; return URI; }
299299
300300%{
301301// Doc comment rule
0 commit comments