1 | /* |
2 | ** String handling. |
3 | ** Copyright (C) 2005-2014 Mike Pall. See Copyright Notice in luajit.h |
4 | */ |
5 | |
6 | #ifndef _LJ_STR_H |
7 | #define _LJ_STR_H |
8 | |
9 | #include <stdarg.h> |
10 | |
11 | #include "lj_obj.h" |
12 | |
13 | /* String interning. */ |
14 | LJ_FUNC int32_t LJ_FASTCALL lj_str_cmp(GCstr *a, GCstr *b); |
15 | LJ_FUNC void lj_str_resize(lua_State *L, MSize newmask); |
16 | LJ_FUNCA GCstr *lj_str_new(lua_State *L, const char *str, size_t len); |
17 | LJ_FUNC void LJ_FASTCALL lj_str_free(global_State *g, GCstr *s); |
18 | |
19 | #define lj_str_newz(L, s) (lj_str_new(L, s, strlen(s))) |
20 | #define lj_str_newlit(L, s) (lj_str_new(L, "" s, sizeof(s)-1)) |
21 | |
22 | /* Type conversions. */ |
23 | LJ_FUNC size_t LJ_FASTCALL lj_str_bufnum(char *s, cTValue *o); |
24 | LJ_FUNC char * LJ_FASTCALL lj_str_bufint(char *p, int32_t k); |
25 | LJ_FUNCA GCstr * LJ_FASTCALL lj_str_fromnum(lua_State *L, const lua_Number *np); |
26 | LJ_FUNC GCstr * LJ_FASTCALL lj_str_fromint(lua_State *L, int32_t k); |
27 | LJ_FUNCA GCstr * LJ_FASTCALL lj_str_fromnumber(lua_State *L, cTValue *o); |
28 | |
29 | #define LJ_STR_INTBUF (1+10) |
30 | #define LJ_STR_NUMBUF LUAI_MAXNUMBER2STR |
31 | |
32 | /* String formatting. */ |
33 | LJ_FUNC const char *lj_str_pushvf(lua_State *L, const char *fmt, va_list argp); |
34 | LJ_FUNC const char *lj_str_pushf(lua_State *L, const char *fmt, ...) |
35 | #if defined(__GNUC__) |
36 | __attribute__ ((format (printf, 2, 3))) |
37 | #endif |
38 | ; |
39 | |
40 | /* Resizable string buffers. Struct definition in lj_obj.h. */ |
41 | LJ_FUNC char *lj_str_needbuf(lua_State *L, SBuf *sb, MSize sz); |
42 | |
43 | #define lj_str_initbuf(sb) ((sb)->buf = NULL, (sb)->sz = 0) |
44 | #define lj_str_resetbuf(sb) ((sb)->n = 0) |
45 | #define lj_str_resizebuf(L, sb, size) \ |
46 | ((sb)->buf = (char *)lj_mem_realloc(L, (sb)->buf, (sb)->sz, (size)), \ |
47 | (sb)->sz = (size)) |
48 | #define lj_str_freebuf(g, sb) lj_mem_free(g, (void *)(sb)->buf, (sb)->sz) |
49 | |
50 | #endif |
51 | |