diff options
| -rw-r--r-- | include/mruby.h | 4 | ||||
| -rw-r--r-- | mrbgems/mruby-bin-config/mrbgem.rake | 7 | ||||
| -rw-r--r-- | src/symbol.c | 29 |
3 files changed, 14 insertions, 26 deletions
diff --git a/include/mruby.h b/include/mruby.h index e9fd08102..9792d7482 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -489,7 +489,7 @@ MRB_API void mrb_define_const(mrb_state*, struct RClass*, const char *name, mrb_ * } * @param [mrb_state*] mrb_state* The mruby state reference. * @param [struct RClass*] RClass* A class the method will be undefined from. - * @param [const char] const char* The name of the method to be undefined. + * @param [const char*] const char* The name of the method to be undefined. */ MRB_API void mrb_undef_method(mrb_state*, struct RClass*, const char*); MRB_API void mrb_undef_method_id(mrb_state*, struct RClass*, mrb_sym); @@ -529,7 +529,7 @@ MRB_API void mrb_undef_method_id(mrb_state*, struct RClass*, mrb_sym); * } * @param [mrb_state*] mrb_state* The mruby state reference. * @param [RClass*] RClass* A class the class method will be undefined from. - * @param [constchar*] constchar* The name of the class method to be undefined. + * @param [const char*] const char* The name of the class method to be undefined. */ MRB_API void mrb_undef_class_method(mrb_state*, struct RClass*, const char*); diff --git a/mrbgems/mruby-bin-config/mrbgem.rake b/mrbgems/mruby-bin-config/mrbgem.rake index f293c1b9b..3a0a1b897 100644 --- a/mrbgems/mruby-bin-config/mrbgem.rake +++ b/mrbgems/mruby-bin-config/mrbgem.rake @@ -8,13 +8,14 @@ unless MRuby::Build.current.kind_of?(MRuby::CrossBuild) mruby_config = name + (ENV['OS'] == 'Windows_NT' ? '.bat' : '') mruby_config_path = "#{build.build_dir}/bin/#{mruby_config}" make_cfg = "#{build.build_dir}/lib/libmruby.flags.mak" + tmplt_path = "#{__dir__}/#{mruby_config}" build.bins << mruby_config - file mruby_config_path => [build.libmruby_static, make_cfg] do |t| - config = Hash[File.readlines(make_cfg).map(&:chomp).map {|l| + file mruby_config_path => [make_cfg, tmplt_path] do |t| + config = Hash[File.readlines(make_cfg).map!(&:chomp).map! {|l| l.gsub('\\"', '"').split(' = ', 2).map! {|s| s.sub(/^(?=.)/, 'echo ')} }] - tmplt = File.read("#{__dir__}/#{mruby_config}") + tmplt = File.read(tmplt_path) File.write(t.name, tmplt.gsub(/(#{Regexp.union(*config.keys)})\b/, config)) FileUtils.chmod(0755, t.name) end diff --git a/src/symbol.c b/src/symbol.c index 80437e39e..8424cecd9 100644 --- a/src/symbol.c +++ b/src/symbol.c @@ -72,33 +72,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 @@ -251,9 +240,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 |
