MCPcopy Create free account
hub / github.com/EmmyLua/EmmyLuaDebugger / read_string

Function read_string

third-party/lua-5.2.4/src/llex.c:343–398  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers 1

llexFunction · 0.70

Calls 7

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

Tested by

no test coverage detected