summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro Matz Matsumoto <[email protected]>2013-02-18 09:11:54 +0900
committerYukihiro Matz Matsumoto <[email protected]>2013-02-18 09:11:54 +0900
commit5568df5efee7a7220008227ea622121320c2b49b (patch)
tree729ae20519f664d2150900e6efbb6ae63fae7626
parentdf38a31d3438284ff73fa691b13cb4d0a77e6520 (diff)
parentb04183fd9cc0297005fbe378d2c136516999b82a (diff)
downloadmruby-5568df5efee7a7220008227ea622121320c2b49b.tar.gz
mruby-5568df5efee7a7220008227ea622121320c2b49b.zip
:Merge branch 'master' of github.com:mruby/mruby
Conflicts: src/class.c
-rw-r--r--mrblib/string.rb4
-rw-r--r--src/class.c2
-rw-r--r--test/t/module.rb22
-rw-r--r--test/t/string.rb8
-rw-r--r--tools/mirb/mirb.c4
5 files changed, 36 insertions, 4 deletions
diff --git a/mrblib/string.rb b/mrblib/string.rb
index 9b11bb2e5..8a4894dd4 100644
--- a/mrblib/string.rb
+++ b/mrblib/string.rb
@@ -28,8 +28,10 @@ class String
#
# ISO 15.2.10.5.18
def gsub(*args, &block)
+ lc = ''
if args.size == 2
- split(args[0]).join(args[1])
+ lc = args[1] if self[-1] == args[0]
+ split(args[0]).join(args[1]) + lc
elsif args.size == 1 && block
split(args[0]).join(block.call(args[0]))
else
diff --git a/src/class.c b/src/class.c
index 779078cce..7d99da56a 100644
--- a/src/class.c
+++ b/src/class.c
@@ -1737,7 +1737,7 @@ mrb_mod_remove_const(mrb_state *mrb, mrb_value mod)
check_const_name(mrb, id);
val = mrb_iv_remove(mrb, mod, id);
if (mrb_undef_p(val)) {
- mrb_name_error(mrb, id, "instance variable %s not defined", mrb_sym2name(mrb, id));
+ mrb_name_error(mrb, sym, "constant %s not defined", mrb_sym2name(mrb, sym));
}
return val;
}
diff --git a/test/t/module.rb b/test/t/module.rb
index 286c2c085..6c1c1acda 100644
--- a/test/t/module.rb
+++ b/test/t/module.rb
@@ -241,6 +241,28 @@ assert('Module#remove_class_variable', '15.2.2.4.39') do
not Test4RemoveClassVariable.class_variables.include? :@@cv
end
+assert('Module#remove_const', '15.2.2.4.40') do
+ module Test4RemoveConst
+ ExistingConst = 23
+ end
+
+ result = Test4RemoveConst.module_eval { remove_const :ExistingConst }
+
+ name_error = false
+ begin
+ Test4RemoveConst.module_eval { remove_const :NonExistingConst }
+ rescue NameError
+ name_error = true
+ end
+
+ # Constant removed from Module
+ not Test4RemoveConst.const_defined? :ExistingConst and
+ # Return value of binding
+ result == 23 and
+ # Name Error raised when Constant doesn't exist
+ name_error
+end
+
assert('Module#remove_method', '15.2.2.4.41') do
module Test4RemoveMethod
class Parent
diff --git a/test/t/string.rb b/test/t/string.rb
index fac77075b..7d0b147d0 100644
--- a/test/t/string.rb
+++ b/test/t/string.rb
@@ -193,7 +193,9 @@ assert('String#eql?', '15.2.10.5.17') do
end
assert('String#gsub', '15.2.10.5.18') do
- 'abcabc'.gsub('b', 'B') == 'aBcaBc' && 'abcabc'.gsub('b') { |w| w.capitalize } == 'aBcaBc'
+ 'abcabc'.gsub('b', 'B') == 'aBcaBc' and
+ 'abcabc'.gsub('b') { |w| w.capitalize } == 'aBcaBc' and
+ '#a#a#'.gsub('#', '$') == '$a$a$'
end
assert('String#gsub!', '15.2.10.5.19') do
@@ -318,7 +320,9 @@ assert('String#split', '15.2.10.5.35') do
end
assert('String#sub', '15.2.10.5.36') do
- 'abcabc'.sub('b', 'B') == 'aBcabc' && 'abcabc'.sub('b') { |w| w.capitalize } == 'aBcabc'
+ 'abcabc'.sub('b', 'B') == 'aBcabc' and
+ 'abcabc'.sub('b') { |w| w.capitalize } == 'aBcabc' and
+ 'aa#'.sub('#', '$') == 'aa$'
end
assert('String#sub!', '15.2.10.5.37') do
diff --git a/tools/mirb/mirb.c b/tools/mirb/mirb.c
index 85c3249d2..29685cf28 100644
--- a/tools/mirb/mirb.c
+++ b/tools/mirb/mirb.c
@@ -191,6 +191,10 @@ main(void)
last_code_line[char_index] = '\0';
#else
char* line = readline(code_block_open ? "* " : "> ");
+ if(line == NULL) {
+ printf("\n");
+ break;
+ }
strncat(last_code_line, line, sizeof(last_code_line)-1);
add_history(line);
free(line);