aboutsummaryrefslogtreecommitdiff
path: root/src/lj_buf.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_buf.c')
-rw-r--r--src/lj_buf.c51
1 files changed, 49 insertions, 2 deletions
diff --git a/src/lj_buf.c b/src/lj_buf.c
index 67525694..32ed52b9 100644
--- a/src/lj_buf.c
+++ b/src/lj_buf.c
@@ -34,7 +34,7 @@ LJ_NOINLINE void LJ_FASTCALL lj_buf_grow(SBuf *sb, char *en)
34char * LJ_FASTCALL lj_buf_tmp(lua_State *L, MSize sz) 34char * LJ_FASTCALL lj_buf_tmp(lua_State *L, MSize sz)
35{ 35{
36 SBuf *sb = &G(L)->tmpbuf; 36 SBuf *sb = &G(L)->tmpbuf;
37 setmref(sb->L, L); 37 setsbufL(sb, L);
38 return lj_buf_need(sb, sz); 38 return lj_buf_need(sb, sz);
39} 39}
40 40
@@ -95,12 +95,59 @@ SBuf * LJ_FASTCALL lj_buf_putnum(SBuf *sb, cTValue *o)
95 setsbufP(sb, lj_str_bufnum(lj_buf_more(sb, LJ_STR_NUMBUF), o)); 95 setsbufP(sb, lj_str_bufnum(lj_buf_more(sb, LJ_STR_NUMBUF), o));
96 return sb; 96 return sb;
97} 97}
98#endif
99
100SBuf * LJ_FASTCALL lj_buf_putstr_reverse(SBuf *sb, GCstr *s)
101{
102 MSize len = s->len;
103 char *p = lj_buf_more(sb, len), *e = p+len;
104 const char *q = strdata(s)+len-1;
105 while (p < e)
106 *p++ = *q--;
107 setsbufP(sb, p);
108 return sb;
109}
110
111SBuf * LJ_FASTCALL lj_buf_putstr_lower(SBuf *sb, GCstr *s)
112{
113 MSize len = s->len;
114 char *p = lj_buf_more(sb, len), *e = p+len;
115 const char *q = strdata(s);
116 for (; p < e; p++, q++) {
117 uint32_t c = *(unsigned char *)q;
118#if LJ_TARGET_PPC
119 *p = c + ((c >= 'A' && c <= 'Z') << 5);
120#else
121 if (c >= 'A' && c <= 'Z') c += 0x20;
122 *p = c;
123#endif
124 }
125 setsbufP(sb, p);
126 return sb;
127}
128
129SBuf * LJ_FASTCALL lj_buf_putstr_upper(SBuf *sb, GCstr *s)
130{
131 MSize len = s->len;
132 char *p = lj_buf_more(sb, len), *e = p+len;
133 const char *q = strdata(s);
134 for (; p < e; p++, q++) {
135 uint32_t c = *(unsigned char *)q;
136#if LJ_TARGET_PPC
137 *p = c - ((c >= 'a' && c <= 'z') << 5);
138#else
139 if (c >= 'a' && c <= 'z') c -= 0x20;
140 *p = c;
141#endif
142 }
143 setsbufP(sb, p);
144 return sb;
145}
98 146
99GCstr * LJ_FASTCALL lj_buf_tostr(SBuf *sb) 147GCstr * LJ_FASTCALL lj_buf_tostr(SBuf *sb)
100{ 148{
101 return lj_str_new(sbufL(sb), sbufB(sb), sbuflen(sb)); 149 return lj_str_new(sbufL(sb), sbufB(sb), sbuflen(sb));
102} 150}
103#endif
104 151
105uint32_t LJ_FASTCALL lj_buf_ruleb128(const char **pp) 152uint32_t LJ_FASTCALL lj_buf_ruleb128(const char **pp)
106{ 153{