From acdc2d1f242f2547ca842be5d62a2b06356b39ea Mon Sep 17 00:00:00 2001 From: YAMAMOTO Masaya Date: Wed, 11 Oct 2017 17:53:17 +0900 Subject: Add MRB_WITHOUT_FLOAT --- mrbgems/mruby-compiler/core/codegen.c | 18 ++++++++++++++++++ mrbgems/mruby-compiler/core/parse.y | 8 ++++++++ 2 files changed, 26 insertions(+) (limited to 'mrbgems') diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 8f15a9b18..ba8ed2c71 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -460,6 +460,7 @@ new_lit(codegen_scope *s, mrb_value val) return i; } break; +#ifndef MRB_WITHOUT_FLOAT case MRB_TT_FLOAT: for (i=0; iirep->plen; i++) { pv = &s->irep->pool[i]; @@ -467,6 +468,7 @@ new_lit(codegen_scope *s, mrb_value val) if (mrb_float(*pv) == mrb_float(val)) return i; } break; +#endif case MRB_TT_FIXNUM: for (i=0; iirep->plen; i++) { pv = &s->irep->pool[i]; @@ -492,10 +494,12 @@ new_lit(codegen_scope *s, mrb_value val) *pv = mrb_str_pool(s->mrb, val); break; +#ifndef MRB_WITHOUT_FLOAT case MRB_TT_FLOAT: #ifdef MRB_WORD_BOXING *pv = mrb_float_pool(s->mrb, mrb_float(val)); break; +#endif #endif case MRB_TT_FIXNUM: *pv = val; @@ -1163,6 +1167,7 @@ raise_error(codegen_scope *s, const char *msg) genop(s, MKOP_ABx(OP_ERR, 1, idx)); } +#ifndef MRB_WITHOUT_FLOAT static double readint_float(codegen_scope *s, const char *p, int base) { @@ -1188,6 +1193,7 @@ readint_float(codegen_scope *s, const char *p, int base) } return f; } +#endif static mrb_int readint_mrb_int(codegen_scope *s, const char *p, int base, mrb_bool neg, mrb_bool *overflow) @@ -2237,6 +2243,7 @@ codegen(codegen_scope *s, node *tree, int val) mrb_bool overflow; i = readint_mrb_int(s, p, base, FALSE, &overflow); +#ifndef MRB_WITHOUT_FLOAT if (overflow) { double f = readint_float(s, p, base); int off = new_lit(s, mrb_float_value(s->mrb, f)); @@ -2244,6 +2251,7 @@ codegen(codegen_scope *s, node *tree, int val) genop(s, MKOP_ABx(OP_LOADL, cursp(), off)); } else { +#endif if (i < MAXARG_sBx && i > -MAXARG_sBx) { co = MKOP_AsBx(OP_LOADI, cursp(), i); } @@ -2252,11 +2260,14 @@ codegen(codegen_scope *s, node *tree, int val) co = MKOP_ABx(OP_LOADL, cursp(), off); } genop(s, co); +#ifndef MRB_WITHOUT_FLOAT } +#endif push(); } break; +#ifndef MRB_WITHOUT_FLOAT case NODE_FLOAT: if (val) { char *p = (char*)tree; @@ -2267,12 +2278,14 @@ codegen(codegen_scope *s, node *tree, int val) push(); } break; +#endif case NODE_NEGATE: { nt = nint(tree->car); tree = tree->cdr; switch (nt) { +#ifndef MRB_WITHOUT_FLOAT case NODE_FLOAT: if (val) { char *p = (char*)tree; @@ -2283,6 +2296,7 @@ codegen(codegen_scope *s, node *tree, int val) push(); } break; +#endif case NODE_INT: if (val) { @@ -2293,6 +2307,7 @@ codegen(codegen_scope *s, node *tree, int val) mrb_bool overflow; i = readint_mrb_int(s, p, base, TRUE, &overflow); +#ifndef MRB_WITHOUT_FLOAT if (overflow) { double f = readint_float(s, p, base); int off = new_lit(s, mrb_float_value(s->mrb, -f)); @@ -2300,6 +2315,7 @@ codegen(codegen_scope *s, node *tree, int val) genop(s, MKOP_ABx(OP_LOADL, cursp(), off)); } else { +#endif if (i < MAXARG_sBx && i > -MAXARG_sBx) { co = MKOP_AsBx(OP_LOADI, cursp(), i); } @@ -2308,7 +2324,9 @@ codegen(codegen_scope *s, node *tree, int val) co = MKOP_ABx(OP_LOADL, cursp(), off); } genop(s, co); +#ifndef MRB_WITHOUT_FLOAT } +#endif push(); } break; diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index 82e4c7bdd..b4a70873d 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -740,12 +740,14 @@ new_int(parser_state *p, const char *s, int base) return list3((node*)NODE_INT, (node*)strdup(s), nint(base)); } +#ifndef MRB_WITHOUT_FLOAT /* (:float . i) */ static node* new_float(parser_state *p, const char *s) { return cons((node*)NODE_FLOAT, (node*)strdup(s)); } +#endif /* (:str . (s . len)) */ static node* @@ -4962,6 +4964,11 @@ parser_yylex(parser_state *p) } tokfix(p); if (is_float) { +#ifdef MRB_WITHOUT_FLOAT + yywarning_s(p, "floating point numbers are not supported", tok(p)); + pylval.nd = new_int(p, "0", 10); + return tINTEGER; +#else double d; char *endp; @@ -4976,6 +4983,7 @@ parser_yylex(parser_state *p) } pylval.nd = new_float(p, tok(p)); return tFLOAT; +#endif } pylval.nd = new_int(p, tok(p), 10); return tINTEGER; -- cgit v1.2.3 From dcd5d0ffec1a6cee3ff1eb81c7d819f8d23dde46 Mon Sep 17 00:00:00 2001 From: YAMAMOTO Masaya Date: Wed, 11 Oct 2017 17:55:27 +0900 Subject: Test for MRB_WITHOUT_FLOAT --- mrbgems/mruby-test/driver.c | 2 ++ mrbgems/mruby-test/mrbgem.rake | 4 ++++ test/t/array.rb | 2 +- test/t/class.rb | 2 +- test/t/hash.rb | 2 +- test/t/integer.rb | 53 ++++++++++++++++++++++++------------------ test/t/numeric.rb | 2 +- test/t/range.rb | 2 +- test/t/string.rb | 11 +++++---- 9 files changed, 48 insertions(+), 32 deletions(-) (limited to 'mrbgems') diff --git a/mrbgems/mruby-test/driver.c b/mrbgems/mruby-test/driver.c index da0d721d4..bc8cce607 100644 --- a/mrbgems/mruby-test/driver.c +++ b/mrbgems/mruby-test/driver.c @@ -94,10 +94,12 @@ mrb_init_test_driver(mrb_state *mrb, mrb_bool verbose) mrb_define_const(mrb, mrbtest, "FIXNUM_MIN", mrb_fixnum_value(MRB_INT_MIN)); mrb_define_const(mrb, mrbtest, "FIXNUM_BIT", mrb_fixnum_value(MRB_INT_BIT)); +#ifndef MRB_WITHOUT_FLOAT #ifdef MRB_USE_FLOAT mrb_define_const(mrb, mrbtest, "FLOAT_TOLERANCE", mrb_float_value(mrb, 1e-6)); #else mrb_define_const(mrb, mrbtest, "FLOAT_TOLERANCE", mrb_float_value(mrb, 1e-12)); +#endif #endif if (verbose) { diff --git a/mrbgems/mruby-test/mrbgem.rake b/mrbgems/mruby-test/mrbgem.rake index ae4c2f131..49714078b 100644 --- a/mrbgems/mruby-test/mrbgem.rake +++ b/mrbgems/mruby-test/mrbgem.rake @@ -7,6 +7,10 @@ MRuby::Gem::Specification.new('mruby-test') do |spec| spec.add_dependency('mruby-compiler', :core => 'mruby-compiler') spec.test_rbfiles = Dir.glob("#{MRUBY_ROOT}/test/t/*.rb") + if build.cc.defines.flatten.include?("MRB_WITHOUT_FLOAT") + spec.test_rbfiles.delete("#{MRUBY_ROOT}/test/t/float.rb") + end + clib = "#{build_dir}/mrbtest.c" mlib = clib.ext(exts.object) diff --git a/test/t/array.rb b/test/t/array.rb index 7c11265a4..d2edd0189 100644 --- a/test/t/array.rb +++ b/test/t/array.rb @@ -55,7 +55,7 @@ assert('Array#[]', '15.2.12.5.4') do assert_equal(nil, [1,2,3].[](-4)) a = [ "a", "b", "c", "d", "e" ] - assert_equal("b", a[1.1]) + assert_equal("b", a[1.1]) if class_defined?("Float") assert_equal(["b", "c"], a[1,2]) assert_equal(["b", "c", "d"], a[1..-2]) end diff --git a/test/t/class.rb b/test/t/class.rb index eb077fce6..a5118fa93 100644 --- a/test/t/class.rb +++ b/test/t/class.rb @@ -358,7 +358,7 @@ assert('singleton tests') do 7 end end - end + end if class_defined?("Float") end assert('clone Class') do diff --git a/test/t/hash.rb b/test/t/hash.rb index c63b8c009..5403a5901 100644 --- a/test/t/hash.rb +++ b/test/t/hash.rb @@ -8,7 +8,7 @@ end assert('Hash#==', '15.2.13.4.1') do assert_true({ 'abc' => 'abc' } == { 'abc' => 'abc' }) assert_false({ 'abc' => 'abc' } == { 'cba' => 'cba' }) - assert_true({ :equal => 1 } == { :equal => 1.0 }) + assert_true({ :equal => 1 } == { :equal => 1.0 }) if class_defined?("Float") assert_false({ :a => 1 } == true) end diff --git a/test/t/integer.rb b/test/t/integer.rb index d4ef8b519..cea97a1e6 100644 --- a/test/t/integer.rb +++ b/test/t/integer.rb @@ -7,56 +7,65 @@ end assert('Integer#+', '15.2.8.3.1') do a = 1+1 - b = 1+1.0 + b = 1+1.0 if class_defined?("Float") assert_equal 2, a - assert_equal 2.0, b + assert_equal 2.0, b if class_defined?("Float") assert_raise(TypeError){ 0+nil } assert_raise(TypeError){ 1+nil } c = Mrbtest::FIXNUM_MAX + 1 d = Mrbtest::FIXNUM_MAX.__send__(:+, 1) - e = Mrbtest::FIXNUM_MAX + 1.0 - assert_equal Float, c.class - assert_equal Float, d.class - assert_float e, c - assert_float e, d + + if class_defined?("Float") + e = Mrbtest::FIXNUM_MAX + 1.0 + assert_equal Float, c.class + assert_equal Float, d.class + assert_float e, c + assert_float e, d + end end assert('Integer#-', '15.2.8.3.2') do a = 2-1 - b = 2-1.0 + b = 2-1.0 if class_defined?("Float") assert_equal 1, a - assert_equal 1.0, b + assert_equal 1.0, b if class_defined?("Float") c = Mrbtest::FIXNUM_MIN - 1 d = Mrbtest::FIXNUM_MIN.__send__(:-, 1) - e = Mrbtest::FIXNUM_MIN - 1.0 - assert_equal Float, c.class - assert_equal Float, d.class - assert_float e, c - assert_float e, d + + if class_defined?("Float") + e = Mrbtest::FIXNUM_MIN - 1.0 + assert_equal Float, c.class + assert_equal Float, d.class + assert_float e, c + assert_float e, d + end end assert('Integer#*', '15.2.8.3.3') do a = 1*1 - b = 1*1.0 + b = 1*1.0 if class_defined?("Float") assert_equal 1, a - assert_equal 1.0, b + assert_equal 1.0, b if class_defined?("Float") assert_raise(TypeError){ 0*nil } assert_raise(TypeError){ 1*nil } c = Mrbtest::FIXNUM_MAX * 2 d = Mrbtest::FIXNUM_MAX.__send__(:*, 2) - e = Mrbtest::FIXNUM_MAX * 2.0 - assert_equal Float, c.class - assert_equal Float, d.class - assert_float e, c - assert_float e, d + + if class_defined?("Float") + e = Mrbtest::FIXNUM_MAX * 2.0 + assert_equal Float, c.class + assert_equal Float, d.class + assert_float e, c + assert_float e, d + end end assert('Integer#/', '15.2.8.3.4') do @@ -218,7 +227,7 @@ end assert('Integer#to_f', '15.2.8.3.23') do assert_equal 1.0, 1.to_f -end +end if class_defined?("Float") assert('Integer#to_i', '15.2.8.3.24') do assert_equal 1, 1.to_i diff --git a/test/t/numeric.rb b/test/t/numeric.rb index 120cc960d..38c62a669 100644 --- a/test/t/numeric.rb +++ b/test/t/numeric.rb @@ -15,7 +15,7 @@ end assert('Numeric#abs', '15.2.7.4.3') do assert_equal(1, 1.abs) - assert_equal(1.0, -1.abs) + assert_equal(1.0, -1.abs) if class_defined?("Float") end assert('Numeric#pow') do diff --git a/test/t/range.rb b/test/t/range.rb index 5391369de..3e67fcc1c 100644 --- a/test/t/range.rb +++ b/test/t/range.rb @@ -8,7 +8,7 @@ end assert('Range#==', '15.2.14.4.1') do assert_true (1..10) == (1..10) assert_false (1..10) == (1..100) - assert_true (1..10) == Range.new(1.0, 10.0) + assert_true (1..10) == Range.new(1.0, 10.0) if class_defined?("Float") end assert('Range#===', '15.2.14.4.2') do diff --git a/test/t/string.rb b/test/t/string.rb index a4139622a..c9041469e 100644 --- a/test/t/string.rb +++ b/test/t/string.rb @@ -154,10 +154,11 @@ assert('String#[]=') do d[-10] = 'X' end - e = 'abc' - e[1.1] = 'X' - assert_equal 'aXc', e - + if class_defined?("Float") + e = 'abc' + e[1.1] = 'X' + assert_equal 'aXc', e + end # length of args is 2 a1 = 'abc' @@ -629,7 +630,7 @@ assert('String#to_f', '15.2.10.5.38') do assert_float(12345.6789, c) assert_float(0, d) assert_float(Float::INFINITY, e) -end +end if class_defined?("Float") assert('String#to_i', '15.2.10.5.39') do a = ''.to_i -- cgit v1.2.3 From 5d781312caf51bd7fc931e6d3d4d4a59ba964d27 Mon Sep 17 00:00:00 2001 From: YAMAMOTO Masaya Date: Fri, 13 Oct 2017 16:42:35 +0900 Subject: Support MRB_WIHTOUT_FLOAT to mruby-sprintf --- mrbgems/mruby-sprintf/src/sprintf.c | 10 ++++++++++ mrbgems/mruby-sprintf/test/sprintf.rb | 7 ++++--- 2 files changed, 14 insertions(+), 3 deletions(-) (limited to 'mrbgems') diff --git a/mrbgems/mruby-sprintf/src/sprintf.c b/mrbgems/mruby-sprintf/src/sprintf.c index efa0b3d34..7eea1a1f3 100644 --- a/mrbgems/mruby-sprintf/src/sprintf.c +++ b/mrbgems/mruby-sprintf/src/sprintf.c @@ -12,7 +12,9 @@ #include #include #include +#ifndef MRB_WITHOUT_FLOAT #include +#endif #include #define BIT_DIGITS(N) (((N)*146)/485 + 1) /* log2(10) =~ 146/485 */ @@ -20,7 +22,9 @@ #define EXTENDSIGN(n, l) (((~0U << (n)) >> (((n)*(l)) % BITSPERDIG)) & ~(~0U << (n))) mrb_value mrb_str_format(mrb_state *, mrb_int, const mrb_value *, mrb_value); +#ifndef MRB_WITHOUT_FLOAT static void fmt_setup(char*,size_t,int,int,mrb_int,mrb_int); +#endif static char* remove_sign_bits(char *str, int base) @@ -814,10 +818,12 @@ retry: bin_retry: switch (mrb_type(val)) { +#ifndef MRB_WITHOUT_FLOAT case MRB_TT_FLOAT: val = mrb_flo_to_fixnum(mrb, val); if (mrb_fixnum_p(val)) goto bin_retry; break; +#endif case MRB_TT_STRING: val = mrb_str_to_inum(mrb, val, 0, TRUE); goto bin_retry; @@ -990,6 +996,7 @@ retry: } break; +#ifndef MRB_WITHOUT_FLOAT case 'f': case 'g': case 'G': @@ -1069,6 +1076,7 @@ retry: blen += n; } break; +#endif } flags = FNONE; } @@ -1088,6 +1096,7 @@ retry: return result; } +#ifndef MRB_WITHOUT_FLOAT static void fmt_setup(char *buf, size_t size, int c, int flags, mrb_int width, mrb_int prec) { @@ -1114,3 +1123,4 @@ fmt_setup(char *buf, size_t size, int c, int flags, mrb_int width, mrb_int prec) *buf++ = c; *buf = '\0'; } +#endif diff --git a/mrbgems/mruby-sprintf/test/sprintf.rb b/mrbgems/mruby-sprintf/test/sprintf.rb index e3b66ef9c..a5fd4e638 100644 --- a/mrbgems/mruby-sprintf/test/sprintf.rb +++ b/mrbgems/mruby-sprintf/test/sprintf.rb @@ -3,7 +3,8 @@ assert('String#%') do assert_equal "one=1", "one=%d" % 1 - assert_equal "1 one 1.0", "%d %s %3.1f" % [ 1, "one", 1.01 ] + assert_equal "1 one", "%d %s" % [ 1, "one" ] + assert_equal "1.0", "%3.1f" % 1.01 if class_defined?("Float") assert_equal "123 < 456", "%{num} < %s" % { num: 123, str: "456" } assert_equal 15, ("%b" % (1<<14)).size end @@ -34,7 +35,7 @@ assert('String#% with inf') do assert_equal " Inf", "% 3f" % inf assert_equal " Inf", "% 4f" % inf assert_equal " Inf", "% 5f" % inf -end +end if class_defined?("Float") assert('String#% with nan') do nan = Float::NAN @@ -62,7 +63,7 @@ assert('String#% with nan') do assert_equal " NaN", "% 3f" % nan assert_equal " NaN", "% 4f" % nan assert_equal " NaN", "% 5f" % nan -end +end if class_defined?("Float") assert("String#% with invalid chr") do begin -- cgit v1.2.3 From 9c1f21aaa1fe22fbe5f89d5ef4acbcacc4f707a6 Mon Sep 17 00:00:00 2001 From: YAMAMOTO Masaya Date: Mon, 16 Oct 2017 18:09:56 +0900 Subject: Support MRB_WIHTOUT_FLOAT to mruby-string-ext --- mrbgems/mruby-string-ext/src/string.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'mrbgems') diff --git a/mrbgems/mruby-string-ext/src/string.c b/mrbgems/mruby-string-ext/src/string.c index 63f181749..ac3e82a45 100644 --- a/mrbgems/mruby-string-ext/src/string.c +++ b/mrbgems/mruby-string-ext/src/string.c @@ -67,9 +67,11 @@ mrb_str_byteslice(mrb_state *mrb, mrb_value str) } return mrb_nil_value(); } +#ifndef MRB_WITHOUT_FLOAT case MRB_TT_FLOAT: a1 = mrb_fixnum_value((mrb_int)mrb_float(a1)); /* fall through */ +#endif case MRB_TT_FIXNUM: return mrb_str_substr(mrb, str, mrb_fixnum(a1), 1); default: -- cgit v1.2.3 From b0cdb93a3ad83ec2322496e8407521efb123e10b Mon Sep 17 00:00:00 2001 From: YAMAMOTO Masaya Date: Mon, 16 Oct 2017 18:14:34 +0900 Subject: Support MRB_WIHTOUT_FLOAT to mruby-numeric-ext (test only) --- mrbgems/mruby-numeric-ext/test/numeric.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mrbgems') diff --git a/mrbgems/mruby-numeric-ext/test/numeric.rb b/mrbgems/mruby-numeric-ext/test/numeric.rb index 8bead2489..6ea0c14e7 100644 --- a/mrbgems/mruby-numeric-ext/test/numeric.rb +++ b/mrbgems/mruby-numeric-ext/test/numeric.rb @@ -15,7 +15,7 @@ end assert('Float#div') do assert_float 52, 365.2425.div(7) -end +end if class_defined?("Float") assert('Integer#zero?') do assert_equal true, 0.zero? -- cgit v1.2.3 From 9afd376fa40c37446a8df5f2222384f8a01960f9 Mon Sep 17 00:00:00 2001 From: YAMAMOTO Masaya Date: Mon, 16 Oct 2017 18:15:25 +0900 Subject: Support MRB_WIHTOUT_FLOAT to mruby-object-ext --- mrbgems/mruby-object-ext/src/object.c | 6 ++++++ mrbgems/mruby-object-ext/test/nil.rb | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'mrbgems') diff --git a/mrbgems/mruby-object-ext/src/object.c b/mrbgems/mruby-object-ext/src/object.c index 35a07b584..b076b3ec0 100644 --- a/mrbgems/mruby-object-ext/src/object.c +++ b/mrbgems/mruby-object-ext/src/object.c @@ -16,6 +16,7 @@ nil_to_a(mrb_state *mrb, mrb_value obj) return mrb_ary_new(mrb); } +#ifndef MRB_WITHOUT_FLOAT /* * call-seq: * nil.to_f -> 0.0 @@ -28,6 +29,7 @@ nil_to_f(mrb_state *mrb, mrb_value obj) { return mrb_float_value(mrb, 0.0); } +#endif /* * call-seq: @@ -77,7 +79,9 @@ mrb_obj_instance_exec(mrb_state *mrb, mrb_value self) switch (mrb_type(self)) { case MRB_TT_SYMBOL: case MRB_TT_FIXNUM: +#ifndef MRB_WITHOUT_FLOAT case MRB_TT_FLOAT: +#endif c = NULL; break; default: @@ -94,7 +98,9 @@ mrb_mruby_object_ext_gem_init(mrb_state* mrb) struct RClass * n = mrb->nil_class; mrb_define_method(mrb, n, "to_a", nil_to_a, MRB_ARGS_NONE()); +#ifndef MRB_WITHOUT_FLOAT mrb_define_method(mrb, n, "to_f", nil_to_f, MRB_ARGS_NONE()); +#endif mrb_define_method(mrb, n, "to_i", nil_to_i, MRB_ARGS_NONE()); mrb_define_method(mrb, mrb->kernel_module, "instance_exec", mrb_obj_instance_exec, MRB_ARGS_ANY() | MRB_ARGS_BLOCK()); diff --git a/mrbgems/mruby-object-ext/test/nil.rb b/mrbgems/mruby-object-ext/test/nil.rb index 5cd1cf4ed..7f773637a 100644 --- a/mrbgems/mruby-object-ext/test/nil.rb +++ b/mrbgems/mruby-object-ext/test/nil.rb @@ -4,7 +4,7 @@ end assert('NilClass#to_f') do assert_equal 0.0, nil.to_f -end +end if class_defined?("Float") assert('NilClass#to_i') do assert_equal 0, nil.to_i -- cgit v1.2.3 From b70d69de09130ce2bc89289b4826b3deea8afaae Mon Sep 17 00:00:00 2001 From: YAMAMOTO Masaya Date: Mon, 16 Oct 2017 18:15:47 +0900 Subject: Support MRB_WIHTOUT_FLOAT to mruby-kernel-ext --- mrbgems/mruby-kernel-ext/src/kernel.c | 4 ++++ mrbgems/mruby-kernel-ext/test/kernel.rb | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'mrbgems') diff --git a/mrbgems/mruby-kernel-ext/src/kernel.c b/mrbgems/mruby-kernel-ext/src/kernel.c index 7e6fa28bd..33abe1531 100644 --- a/mrbgems/mruby-kernel-ext/src/kernel.c +++ b/mrbgems/mruby-kernel-ext/src/kernel.c @@ -114,6 +114,7 @@ mrb_f_integer(mrb_state *mrb, mrb_value self) return mrb_convert_to_integer(mrb, arg, base); } +#ifndef MRB_WITHOUT_FLOAT /* * call-seq: * Float(arg) -> float @@ -134,6 +135,7 @@ mrb_f_float(mrb_state *mrb, mrb_value self) mrb_get_args(mrb, "o", &arg); return mrb_Float(mrb, arg); } +#endif /* * call-seq: @@ -231,7 +233,9 @@ mrb_mruby_kernel_ext_gem_init(mrb_state *mrb) mrb_define_module_function(mrb, krn, "caller", mrb_f_caller, MRB_ARGS_OPT(2)); mrb_define_method(mrb, krn, "__method__", mrb_f_method, MRB_ARGS_NONE()); mrb_define_module_function(mrb, krn, "Integer", mrb_f_integer, MRB_ARGS_ANY()); +#ifndef MRB_WITHOUT_FLOAT mrb_define_module_function(mrb, krn, "Float", mrb_f_float, MRB_ARGS_REQ(1)); +#endif mrb_define_module_function(mrb, krn, "String", mrb_f_string, MRB_ARGS_REQ(1)); mrb_define_module_function(mrb, krn, "Array", mrb_f_array, MRB_ARGS_REQ(1)); mrb_define_module_function(mrb, krn, "Hash", mrb_f_hash, MRB_ARGS_REQ(1)); diff --git a/mrbgems/mruby-kernel-ext/test/kernel.rb b/mrbgems/mruby-kernel-ext/test/kernel.rb index 89cedaf27..206b7ac74 100644 --- a/mrbgems/mruby-kernel-ext/test/kernel.rb +++ b/mrbgems/mruby-kernel-ext/test/kernel.rb @@ -49,7 +49,7 @@ assert('Kernel#__method__') do end assert('Kernel#Integer') do - assert_equal(123, Integer(123.999)) + assert_equal(123, Integer(123.999)) if class_defined?("Float") assert_equal(26, Integer("0x1a")) assert_equal(930, Integer("0930", 10)) assert_equal(7, Integer("111", 2)) @@ -63,7 +63,7 @@ assert('Kernel#Float') do assert_equal(123.456, Float(123.456)) assert_equal(123.456, Float("123.456")) assert_raise(TypeError) { Float(nil) } -end +end if class_defined?("Float") assert('Kernel#String') do assert_equal("main", String(self)) -- cgit v1.2.3