summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/mruby.h4
-rw-r--r--mrbgems/mruby-bin-config/mrbgem.rake7
-rw-r--r--src/symbol.c29
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