mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Move Intefer#chr to Integral#chr.
Since mruby mixes `Integer` and `Float`, integer operations have been moved to `Integral` module.
This commit is contained in:
@@ -1,13 +1,34 @@
|
||||
#include <limits.h>
|
||||
#include <mruby.h>
|
||||
|
||||
static inline mrb_int
|
||||
to_int(mrb_value x)
|
||||
{
|
||||
double f;
|
||||
|
||||
if (mrb_fixnum_p(x)) return mrb_fixnum(x);
|
||||
f = mrb_float(x);
|
||||
return (mrb_int)f;
|
||||
}
|
||||
|
||||
/*
|
||||
* Document-method: Integer#chr
|
||||
* call-seq:
|
||||
* int.chr -> string
|
||||
*
|
||||
* Returns a string containing the character represented by the +int+'s value
|
||||
* according to +encoding+.
|
||||
*
|
||||
* 65.chr #=> "A"
|
||||
* 230.chr #=> "\xE6"
|
||||
*/
|
||||
static mrb_value
|
||||
mrb_int_chr(mrb_state *mrb, mrb_value x)
|
||||
{
|
||||
mrb_int chr;
|
||||
char c;
|
||||
|
||||
chr = mrb_fixnum(x);
|
||||
chr = to_int(x);
|
||||
if (chr >= (1 << CHAR_BIT)) {
|
||||
mrb_raisef(mrb, E_RANGE_ERROR, "%S out of char range", x);
|
||||
}
|
||||
@@ -19,7 +40,7 @@ mrb_int_chr(mrb_state *mrb, mrb_value x)
|
||||
void
|
||||
mrb_mruby_numeric_ext_gem_init(mrb_state* mrb)
|
||||
{
|
||||
struct RClass *i = mrb_class_get(mrb, "Integer");
|
||||
struct RClass *i = mrb_module_get(mrb, "Integral");
|
||||
|
||||
mrb_define_method(mrb, i, "chr", mrb_int_chr, MRB_ARGS_NONE());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user