MCPcopy Create free account
hub / github.com/F-Stack/f-stack / read_string

Function read_string

freebsd/contrib/openzfs/module/lua/llex.c:340–395  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

338
339
340static void read_string (LexState *ls, int del, SemInfo *seminfo) {
341 save_and_next(ls); /* keep delimiter (for error messages) */
342 while (ls->current != del) {
343 switch (ls->current) {
344 case EOZ:
345 lexerror(ls, "unfinished string", TK_EOS);
346 break; /* to avoid warnings */
347 case '\n':
348 case '\r':
349 lexerror(ls, "unfinished string", TK_STRING);
350 break; /* to avoid warnings */
351 case '\\': { /* escape sequences */
352 int c; /* final character to be saved */
353 next(ls); /* do not save the `\' */
354 switch (ls->current) {
355 case 'a': c = '\a'; goto read_save;
356 case 'b': c = '\b'; goto read_save;
357 case 'f': c = '\f'; goto read_save;
358 case 'n': c = '\n'; goto read_save;
359 case 'r': c = '\r'; goto read_save;
360 case 't': c = '\t'; goto read_save;
361 case 'v': c = '\v'; goto read_save;
362 case 'x': c = readhexaesc(ls); goto read_save;
363 case '\n': case '\r':
364 inclinenumber(ls); c = '\n'; goto only_save;
365 case '\\': case '\"': case '\'':
366 c = ls->current; goto read_save;
367 case EOZ: goto no_save; /* will raise an error next loop */
368 case 'z': { /* zap following span of spaces */
369 next(ls); /* skip the 'z' */
370 while (lisspace(ls->current)) {
371 if (currIsNewline(ls)) inclinenumber(ls);
372 else next(ls);
373 }
374 goto no_save;
375 }
376 default: {
377 if (!lisdigit(ls->current))
378 escerror(ls, &ls->current, 1, "invalid escape sequence");
379 /* digital escape \ddd */
380 c = readdecesc(ls);
381 goto only_save;
382 }
383 }
384 read_save: next(ls); /* read next character */
385 only_save: save(ls, c); /* save 'c' */
386 no_save: break;
387 }
388 default:
389 save_and_next(ls);
390 }
391 }
392 save_and_next(ls); /* skip delimiter */
393 seminfo->ts = luaX_newstring(ls, luaZ_buffer(ls->buff) + 1,
394 luaZ_bufflen(ls->buff) - 2);
395}
396
397

Callers 1

llexFunction · 0.70

Calls 8

lexerrorFunction · 0.85
nextFunction · 0.85
readhexaescFunction · 0.85
escerrorFunction · 0.85
readdecescFunction · 0.85
inclinenumberFunction · 0.70
saveFunction · 0.70
luaX_newstringFunction · 0.70

Tested by

no test coverage detected