summaryrefslogtreecommitdiff
path: root/io.c
diff options
context:
space:
mode:
Diffstat (limited to 'io.c')
-rw-r--r--io.c48
1 files changed, 33 insertions, 15 deletions
diff --git a/io.c b/io.c
index c8a5905630..4cbce26c9c 100644
--- a/io.c
+++ b/io.c
@@ -6759,6 +6759,35 @@ rb_p(VALUE obj) /* for debug print within C code */
}
}
+struct rb_f_p_arg {
+ int argc;
+ VALUE *argv;
+};
+
+static VALUE
+rb_f_p_internal(VALUE arg)
+{
+ struct rb_f_p_arg *arg1 = (struct rb_f_p_arg*)arg;
+ int argc = arg1->argc;
+ VALUE *argv = arg1->argv;
+ int i;
+ VALUE ret = Qnil;
+
+ for (i=0; i<argc; i++) {
+ rb_p(argv[i]);
+ }
+ if (argc == 1) {
+ ret = argv[0];
+ }
+ else if (argc > 1) {
+ ret = rb_ary_new4(argc, argv);
+ }
+ if (RB_TYPE_P(rb_stdout, T_FILE)) {
+ rb_io_flush(rb_stdout);
+ }
+ return ret;
+}
+
/*
* call-seq:
* p(obj) -> obj
@@ -6780,22 +6809,11 @@ rb_p(VALUE obj) /* for debug print within C code */
static VALUE
rb_f_p(int argc, VALUE *argv, VALUE self)
{
- int i;
- VALUE ret = Qnil;
+ struct rb_f_p_arg arg;
+ arg.argc = argc;
+ arg.argv = argv;
- for (i=0; i<argc; i++) {
- rb_p(argv[i]);
- }
- if (argc == 1) {
- ret = argv[0];
- }
- else if (argc > 1) {
- ret = rb_ary_new4(argc, argv);
- }
- if (RB_TYPE_P(rb_stdout, T_FILE)) {
- rb_io_flush(rb_stdout);
- }
- return ret;
+ return rb_uninterruptible(rb_f_p_internal, (VALUE)&arg);
}
/*