summaryrefslogtreecommitdiff
path: root/marshal.c
diff options
context:
space:
mode:
authortadf <tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-06-03 12:21:18 +0000
committertadf <tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-06-03 12:21:18 +0000
commitf5b06413cabbedfdd320eb36c68577db8fa99c4f (patch)
tree77ff499058ed2eed2430344ca123a4b8111db00e /marshal.c
parent9977e1cbc799fc1710e65d7978b39a65e75f38b7 (diff)
* marshal.c: calls directly rb_{Complex,Rational}_marshal_load().
But now disabled. [experimental] * complex.c: followed the above. * rational.c: ditto. * include/rub/intern.h: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35886 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'marshal.c')
-rw-r--r--marshal.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/marshal.c b/marshal.c
index 046729d364..45048db2f2 100644
--- a/marshal.c
+++ b/marshal.c
@@ -1622,7 +1622,21 @@ r_object0(struct load_arg *arg, int *ivp, VALUE extmod)
}
v = r_entry(v, arg);
data = r_object(arg);
+#ifndef MARSHAL_LOAD_DIRECT
rb_funcall(v, s_mload, 1, data);
+#else
+ switch (TYPE(v)) {
+ case T_COMPLEX:
+ rb_Complex_marshal_load(v, data);
+ break;
+ case T_RATIONAL:
+ rb_Rational_marshal_load(v, data);
+ break;
+ default:
+ rb_funcall(v, s_mload, 1, data);
+ break;
+ }
+#endif
check_load_arg(arg, s_mload);
v = r_leave(v, arg);
}