diff options
Diffstat (limited to 'prec.c')
-rw-r--r-- | prec.c | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/prec.c b/prec.c new file mode 100644 index 0000000000..693b81ba4c --- /dev/null +++ b/prec.c @@ -0,0 +1,81 @@ +/************************************************ + + ruby.h - + + $Author$ + $Date$ + created at: Tue Jan 26 02:40:41 1999 + + Copyright (C) 1993-1999 Yukihiro Matsumoto + +*************************************************/ + +#include "ruby.h" + +VALUE rb_mPrecision; + +static ID prc_pr, prc_if; + +static VALUE +prec_prec(x, klass) + VALUE x, klass; +{ + return rb_funcall(klass, prc_if, 1, x); +} + +static VALUE +prec_prec_i(x) + VALUE x; +{ + VALUE klass = rb_cInteger; + + return rb_funcall(x, prc_pr, 1, klass); +} + +static VALUE +prec_prec_f(x) + VALUE x; +{ + VALUE klass = rb_cFloat; + + return rb_funcall(x, prc_pr, 1, klass); +} + +static VALUE +prec_induced_from(module, x) + +{ + rb_raise(rb_eTypeError, "undefined conversion from %s into %s", + rb_class2name(CLASS_OF(x)), rb_class2name(module)); +} + +static VALUE +prec_append_features(module, include) + VALUE module, include; +{ + switch (TYPE(include)) { + case T_CLASS: + case T_MODULE: + break; + default: + Check_Type(include, T_CLASS); + break; + } + rb_include_module(include, module); + rb_define_singleton_method(include, "induced_from", prec_induced_from, 1); + return module; +} + + +void +Init_Precision() +{ + rb_mPrecision = rb_define_module("Precision"); + rb_define_singleton_method(rb_mPrecision, "append_features", prec_append_features, 1); + rb_define_method(rb_mPrecision, "prec", prec_prec, 1); + rb_define_method(rb_mPrecision, "prec_i", prec_prec_i, 0); + rb_define_method(rb_mPrecision, "prec_f", prec_prec_f, 0); + + prc_pr = rb_intern("prec"); + prc_if = rb_intern("induced_from"); +} |