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

Function str_format

third-party/lua-5.4.6/src/lstrlib.c:1273–1378  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1271
1272
1273static int str_format (lua_State *L) {
1274 int top = lua_gettop(L);
1275 int arg = 1;
1276 size_t sfl;
1277 const char *strfrmt = luaL_checklstring(L, arg, &sfl);
1278 const char *strfrmt_end = strfrmt+sfl;
1279 const char *flags;
1280 luaL_Buffer b;
1281 luaL_buffinit(L, &b);
1282 while (strfrmt < strfrmt_end) {
1283 if (*strfrmt != L_ESC)
1284 luaL_addchar(&b, *strfrmt++);
1285 else if (*++strfrmt == L_ESC)
1286 luaL_addchar(&b, *strfrmt++); /* %% */
1287 else { /* format item */
1288 char form[MAX_FORMAT]; /* to store the format ('%...') */
1289 int maxitem = MAX_ITEM; /* maximum length for the result */
1290 char *buff = luaL_prepbuffsize(&b, maxitem); /* to put result */
1291 int nb = 0; /* number of bytes in result */
1292 if (++arg > top)
1293 return luaL_argerror(L, arg, "no value");
1294 strfrmt = getformat(L, strfrmt, form);
1295 switch (*strfrmt++) {
1296 case 'c': {
1297 checkformat(L, form, L_FMTFLAGSC, 0);
1298 nb = l_sprintf(buff, maxitem, form, (int)luaL_checkinteger(L, arg));
1299 break;
1300 }
1301 case 'd': case 'i':
1302 flags = L_FMTFLAGSI;
1303 goto intcase;
1304 case 'u':
1305 flags = L_FMTFLAGSU;
1306 goto intcase;
1307 case 'o': case 'x': case 'X':
1308 flags = L_FMTFLAGSX;
1309 intcase: {
1310 lua_Integer n = luaL_checkinteger(L, arg);
1311 checkformat(L, form, flags, 1);
1312 addlenmod(form, LUA_INTEGER_FRMLEN);
1313 nb = l_sprintf(buff, maxitem, form, (LUAI_UACINT)n);
1314 break;
1315 }
1316 case 'a': case 'A':
1317 checkformat(L, form, L_FMTFLAGSF, 1);
1318 addlenmod(form, LUA_NUMBER_FRMLEN);
1319 nb = lua_number2strx(L, buff, maxitem, form,
1320 luaL_checknumber(L, arg));
1321 break;
1322 case 'f':
1323 maxitem = MAX_ITEMF; /* extra space for '%f' */
1324 buff = luaL_prepbuffsize(&b, maxitem);
1325 /* FALLTHROUGH */
1326 case 'e': case 'E': case 'g': case 'G': {
1327 lua_Number n = luaL_checknumber(L, arg);
1328 checkformat(L, form, L_FMTFLAGSF, 1);
1329 addlenmod(form, LUA_NUMBER_FRMLEN);
1330 nb = l_sprintf(buff, maxitem, form, (LUAI_UACNUMBER)n);

Callers

nothing calls this directly

Calls 15

lua_gettopFunction · 0.70
luaL_checklstringFunction · 0.70
luaL_buffinitFunction · 0.70
luaL_prepbuffsizeFunction · 0.70
luaL_argerrorFunction · 0.70
getformatFunction · 0.70
checkformatFunction · 0.70
luaL_checkintegerFunction · 0.70
addlenmodFunction · 0.70
lua_number2strxFunction · 0.70
luaL_checknumberFunction · 0.70
lua_topointerFunction · 0.70

Tested by

no test coverage detected