diff options
| -rw-r--r-- | src/codegen.c | 1 | ||||
| -rw-r--r-- | test/t/class.rb | 34 |
2 files changed, 35 insertions, 0 deletions
diff --git a/src/codegen.c b/src/codegen.c index fc83244f2..731d94319 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -2331,6 +2331,7 @@ codegen(codegen_scope *s, node *tree, int val) genop(s, MKOP_ABx(OP_EXEC, cursp(), idx)); if (val) { push(); + push(); } } break; diff --git a/test/t/class.rb b/test/t/class.rb index d6c0f1c9a..680cd253c 100644 --- a/test/t/class.rb +++ b/test/t/class.rb @@ -258,3 +258,37 @@ assert('Class#inherited') do assert_equal(Baz, Foo.subclass_name) end + +assert('singleton tests') do + bar = String.new + + baz = class << bar + def self.run_baz + 200 + end + end + + assert_false baz.singleton_methods.include? :run_baz + + assert_raise(NoMethodError, 'should raise NoMethodError') do + baz.run_baz + end + + assert_raise(NoMethodError, 'should raise NoMethodError') do + bar.run_baz + end + + baz = class << bar + def self.run_baz + 300 + end + self + end + + assert_true baz.singleton_methods.include? :run_baz + assert_equal 300, baz.run_baz + + assert_raise(NoMethodError, 'should raise NoMethodError') do + bar.run_baz + end +end |
