diff options
| author | mimaki <[email protected]> | 2012-04-20 09:39:03 +0900 |
|---|---|---|
| committer | mimaki <[email protected]> | 2012-04-20 09:39:03 +0900 |
| commit | e0d6430f63c4cbe0c71ce82ee23284671389a818 (patch) | |
| tree | 41abad7f12eced98d9ac14d141cea62464c3332f /src/print.c | |
| parent | 54ad561098ed353ada70205c39b2c42a2a2eb9e5 (diff) | |
| download | mruby-e0d6430f63c4cbe0c71ce82ee23284671389a818.tar.gz mruby-e0d6430f63c4cbe0c71ce82ee23284671389a818.zip | |
add mruby sources
Diffstat (limited to 'src/print.c')
| -rw-r--r-- | src/print.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/print.c b/src/print.c new file mode 100644 index 000000000..a3e05b6f0 --- /dev/null +++ b/src/print.c @@ -0,0 +1,69 @@ +#include "mruby.h" +#include "mruby/string.h" +#include <stdio.h> + +mrb_value +printstr(mrb_state *mrb, mrb_value obj) +{ + struct RString *str; + char *s; + size_t len; + + if (mrb_type(obj) == MRB_TT_STRING) { + str = mrb_str_ptr(obj); + s = str->buf; + len = str->len; + while (len--) { + putc(*s, stdout); + s++; + } + } + return obj; +} + +mrb_value +mrb_p(mrb_state *mrb, mrb_value obj) +{ + obj = mrb_funcall(mrb, obj, "inspect", 0); + printstr(mrb, obj); + putc('\n', stdout); + return obj; +} + +/* 15.3.1.2.9 */ +/* 15.3.1.3.34 */ +static mrb_value +p_m(mrb_state *mrb, mrb_value self) +{ + int argc, i; + mrb_value *argv; + + mrb_get_args(mrb, "*", &argv, &argc); + for (i=0; i<argc; i++) { + mrb_p(mrb, argv[i]); + } + + return argv[0]; +} + +mrb_value +mrb_printstr(mrb_state *mrb, mrb_value self) +{ + mrb_value argv; + + mrb_get_args(mrb, "o", &argv); + printstr(mrb, argv); + + return argv; +} + +void +mrb_init_print(mrb_state *mrb) +{ + struct RClass *krn; + + krn = mrb->kernel_module; + + mrb_define_method(mrb, krn, "__printstr__", mrb_printstr, ARGS_REQ(1)); + mrb_define_method(mrb, krn, "p", p_m, ARGS_ANY()); /* 15.3.1.3.34 */ +} |
