summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorKOBAYASHI Shuji <[email protected]>2019-02-16 20:48:33 +0900
committerKOBAYASHI Shuji <[email protected]>2019-02-16 20:48:33 +0900
commit2c8af128f428e3acdc1d47e727fae88a574d056e (patch)
tree0e84f8a8305ad7c4c3f1d810f6b43cea4117f0be /src
parentc769013f9b09400d9d827f1eb12581eb6bba80ff (diff)
downloadmruby-2c8af128f428e3acdc1d47e727fae88a574d056e.tar.gz
mruby-2c8af128f428e3acdc1d47e727fae88a574d056e.zip
Add length argument for `sym_inline_unpack()`
`sym_inline_unpack_with_bit()` is moved inside of `sym_inline_unpack()` because this is used only one place.
Diffstat (limited to 'src')
-rw-r--r--src/symbol.c29
1 files changed, 8 insertions, 21 deletions
diff --git a/src/symbol.c b/src/symbol.c
index 620ae3418..e09e9019d 100644
--- a/src/symbol.c
+++ b/src/symbol.c
@@ -69,33 +69,22 @@ sym_inline_pack(const char *name, uint16_t len)
}
static const char*
-sym_inline_unpack_with_bit(mrb_sym sym, char *buf, int bit_per_char)
+sym_inline_unpack(mrb_sym sym, char *buf, mrb_int *lenp)
{
+ int bit_per_char = sym&2 ? 5 : 6; /* all lower case if `sym&2` is true */
int i;
- for (i=0; i<30/bit_per_char; i++) {
- uint32_t bits;
- char c;
+ mrb_assert(sym&1);
- bits = sym>>(i*bit_per_char+2) & (1<<bit_per_char)-1;
+ for (i=0; i<30/bit_per_char; i++) {
+ uint32_t bits = sym>>(i*bit_per_char+2) & (1<<bit_per_char)-1;
if (bits == 0) break;
- c = pack_table[bits-1];
- buf[i] = c;
+ buf[i] = pack_table[bits-1];;
}
buf[i] = '\0';
+ if (lenp) *lenp = i;
return buf;
}
-
-static const char*
-sym_inline_unpack(mrb_sym sym, char *buf)
-{
- mrb_assert(sym&1);
-
- if (sym&2) { /* all lower case (5bits/char) */
- return sym_inline_unpack_with_bit(sym, buf, 5);
- }
- return sym_inline_unpack_with_bit(sym, buf, 6);
-}
#endif
uint8_t
@@ -248,9 +237,7 @@ mrb_sym2name_len(mrb_state *mrb, mrb_sym sym, mrb_int *lenp)
{
#ifndef MRB_ENABLE_ALL_SYMBOLS
if (sym & 1) { /* inline packed symbol */
- sym_inline_unpack(sym, mrb->symbuf);
- if (lenp) *lenp = strlen(mrb->symbuf);
- return mrb->symbuf;
+ return sym_inline_unpack(sym, mrb->symbuf, lenp);
}
#endif