Skip to content

Commit c980fe2

Browse files
committed
Integrate Integral#chr (Fixnum#chr) to mruby-string-ext
Because they're defined in both `mruby-string-ext` and `mruby-numeric-ext` (they seem more natural to define in N, but `mruby-string-ext` depends on `Integral#chr`).
1 parent cf4cddf commit c980fe2

5 files changed

Lines changed: 9 additions & 42 deletions

File tree

mrbgems/mruby-numeric-ext/src/numeric_ext.c

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -8,32 +8,6 @@ to_int(mrb_state *mrb, mrb_value x)
88
return mrb_fixnum(x);
99
}
1010

11-
/*
12-
* Document-method: Integer#chr
13-
* call-seq:
14-
* int.chr -> string
15-
*
16-
* Returns a string containing the character represented by the +int+'s value
17-
* according to +encoding+.
18-
*
19-
* 65.chr #=> "A"
20-
* 230.chr #=> "\xE6"
21-
*/
22-
static mrb_value
23-
mrb_int_chr(mrb_state *mrb, mrb_value x)
24-
{
25-
mrb_int chr;
26-
char c;
27-
28-
chr = to_int(mrb, x);
29-
if (chr >= (1 << CHAR_BIT)) {
30-
mrb_raisef(mrb, E_RANGE_ERROR, "%S out of char range", x);
31-
}
32-
c = (char)chr;
33-
34-
return mrb_str_new(mrb, &c, 1);
35-
}
36-
3711
/*
3812
* call-seq:
3913
* int.allbits?(mask) -> true or false
@@ -87,7 +61,6 @@ mrb_mruby_numeric_ext_gem_init(mrb_state* mrb)
8761
{
8862
struct RClass *i = mrb_module_get(mrb, "Integral");
8963

90-
mrb_define_method(mrb, i, "chr", mrb_int_chr, MRB_ARGS_NONE());
9164
mrb_define_method(mrb, i, "allbits?", mrb_int_allbits, MRB_ARGS_REQ(1));
9265
mrb_define_method(mrb, i, "anybits?", mrb_int_anybits, MRB_ARGS_REQ(1));
9366
mrb_define_method(mrb, i, "nobits?", mrb_int_nobits, MRB_ARGS_REQ(1));

mrbgems/mruby-numeric-ext/test/numeric.rb

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,6 @@
11
##
22
# Numeric(Ext) Test
33

4-
assert('Integer#chr') do
5-
assert_equal("A", 65.chr)
6-
assert_equal("B", 0x42.chr)
7-
8-
# multibyte encoding (not support yet)
9-
assert_raise(RangeError) { 256.chr }
10-
end
11-
124
assert('Integer#div') do
135
assert_equal 52, 365.div(7)
146
end

mrbgems/mruby-string-ext/src/string.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ mrb_str_swapcase(mrb_state *mrb, mrb_value self)
125125
return str;
126126
}
127127

128-
static mrb_value mrb_fixnum_chr(mrb_state *mrb, mrb_value num);
128+
static mrb_value mrb_int_chr(mrb_state *mrb, mrb_value num);
129129

130130
/*
131131
* call-seq:
@@ -149,7 +149,7 @@ mrb_str_concat_m(mrb_state *mrb, mrb_value self)
149149

150150
mrb_get_args(mrb, "o", &str);
151151
if (mrb_fixnum_p(str))
152-
str = mrb_fixnum_chr(mrb, str);
152+
str = mrb_int_chr(mrb, str);
153153
else
154154
str = mrb_ensure_string_type(mrb, str);
155155
mrb_str_concat(mrb, self, str);
@@ -837,7 +837,7 @@ mrb_str_chr(mrb_state *mrb, mrb_value self)
837837
}
838838

839839
static mrb_value
840-
mrb_fixnum_chr(mrb_state *mrb, mrb_value num)
840+
mrb_int_chr(mrb_state *mrb, mrb_value num)
841841
{
842842
mrb_int cp = mrb_fixnum(num);
843843
#ifdef MRB_UTF8_STRING
@@ -1219,7 +1219,7 @@ mrb_mruby_string_ext_gem_init(mrb_state* mrb)
12191219
mrb_define_method(mrb, s, "delete_suffix", mrb_str_del_suffix, MRB_ARGS_REQ(1));
12201220

12211221
mrb_define_method(mrb, s, "__lines", mrb_str_lines, MRB_ARGS_NONE());
1222-
mrb_define_method(mrb, mrb->fixnum_class, "chr", mrb_fixnum_chr, MRB_ARGS_NONE());
1222+
mrb_define_method(mrb, mrb_module_get(mrb, "Integral"), "chr", mrb_int_chr, MRB_ARGS_NONE());
12231223
}
12241224

12251225
void

mrbgems/mruby-string-ext/test/fixnum.rb

Lines changed: 0 additions & 3 deletions
This file was deleted.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
assert('Integer#chr') do
2+
assert_equal("A", 65.chr)
3+
assert_equal("B", 0x42.chr)
4+
assert_raise(RangeError) { -1.chr }
5+
end

0 commit comments

Comments
 (0)