From 5b10439f6fcf49a5283e4e01b920f350db36e684 Mon Sep 17 00:00:00 2001 From: KOBAYASHI Shuji Date: Fri, 15 Feb 2019 19:48:00 +0900 Subject: Extract code fragment for unpacking into method in `sym_inline_unpack()` --- src/symbol.c | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/src/symbol.c b/src/symbol.c index 19e5c2d62..620ae3418 100644 --- a/src/symbol.c +++ b/src/symbol.c @@ -69,31 +69,15 @@ sym_inline_pack(const char *name, uint16_t len) } static const char* -sym_inline_unpack(mrb_sym sym, char *buf) +sym_inline_unpack_with_bit(mrb_sym sym, char *buf, int bit_per_char) { int i; - mrb_assert(sym&1); - - if (sym&2) { /* all lower case (5bits/char) */ - for (i=0; i<6; i++) { - uint32_t bits; - char c; - - bits = sym>>(i*5+2) & 31; - if (bits == 0) break; - c = pack_table[bits-1]; - buf[i] = c; - } - buf[i] = '\0'; - return buf; - } - - for (i=0; i<5; i++) { + for (i=0; i<30/bit_per_char; i++) { uint32_t bits; char c; - bits = sym>>(i*6+2) & 63; + bits = sym>>(i*bit_per_char+2) & (1<