From 5612d195ec39612b7216ff3f28d05ed089452767 Mon Sep 17 00:00:00 2001 From: Daniel Bovensiepen Date: Sun, 3 Jun 2012 23:29:40 +0800 Subject: Improve Class#superclass to ISO --- src/class.c | 12 +++++++++--- test/t/class.rb | 10 +++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/class.c b/src/class.c index c689552f5..594ed08bc 100644 --- a/src/class.c +++ b/src/class.c @@ -822,10 +822,16 @@ mrb_class_new_class(mrb_state *mrb, mrb_value cv) mrb_value mrb_class_superclass(mrb_state *mrb, mrb_value klass) { - struct RClass *c, *s; + struct RClass *c; + mrb_value superclass; + c = mrb_class_ptr(klass); - s = mrb_class_real(c->super); - return mrb_obj_value(s); + if (c->super) + superclass = mrb_obj_value(mrb_class_real(c->super)); + else + superclass = mrb_nil_value(); + + return superclass; } static mrb_value diff --git a/test/t/class.rb b/test/t/class.rb index d252cf590..1b809a832 100644 --- a/test/t/class.rb +++ b/test/t/class.rb @@ -5,9 +5,8 @@ assert('Class', '15.2.3') do Class.class == Class end -assert('Class#superclass', '15.2.3.3.4') do - class SubClass < String; end - SubClass.superclass == String +assert('Class superclass', '15.2.3.2') do + Class.superclass == Module end assert('Class#new', '15.2.3.3.3') do @@ -40,6 +39,11 @@ assert('Class#new', '15.2.3.3.3') do # with block doesn't work yet end +assert('Class#superclass', '15.2.3.3.4') do + class SubClass < String; end + SubClass.superclass == String +end + # Not ISO specified assert('Class 1') do -- cgit v1.2.3