summaryrefslogtreecommitdiff
path: root/marshal.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-04-10 05:48:43 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-04-10 05:48:43 +0000
commit7194267b3bdf68ad75bd6bee8e7c6377f7b0ea2f (patch)
tree6dcd08ef584fc777cf34517136d5ce3948840e45 /marshal.c
parentbe72d9a5da9be284d2bdb8047e50f14e014b7835 (diff)
2000-04-10
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@661 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'marshal.c')
-rw-r--r--marshal.c41
1 files changed, 30 insertions, 11 deletions
diff --git a/marshal.c b/marshal.c
index 3a6d3bd000..a152010c20 100644
--- a/marshal.c
+++ b/marshal.c
@@ -254,7 +254,7 @@ w_object(obj, arg, limit)
#endif
}
else if (SYMBOL_P(obj)) {
- w_symbol(obj, arg);
+ w_symbol(SYM2ID(obj), arg);
return;
}
else {
@@ -597,20 +597,25 @@ r_bytes0(s, len, arg)
}
static ID
-r_symbol(arg)
+r_symlink(arg)
struct load_arg *arg;
{
- char *buf;
ID id;
+ int num = r_long(arg);
- if (r_byte(arg) == TYPE_SYMLINK) {
- int num = r_long(arg);
-
- if (st_lookup(arg->symbol, num, &id)) {
- return id;
- }
- rb_raise(rb_eTypeError, "bad symbol");
+ if (st_lookup(arg->symbol, num, &id)) {
+ return id;
}
+ rb_raise(rb_eTypeError, "bad symbol");
+}
+
+static ID
+r_symreal(arg)
+ struct load_arg *arg;
+{
+ char *buf;
+ ID id;
+
r_bytes(buf, arg);
id = rb_intern(buf);
st_insert(arg->symbol, arg->symbol->num_entries, id);
@@ -618,6 +623,16 @@ r_symbol(arg)
return id;
}
+static ID
+r_symbol(arg)
+ struct load_arg *arg;
+{
+ if (r_byte(arg) == TYPE_SYMLINK) {
+ return r_symlink(arg);
+ }
+ return r_symreal(arg);
+}
+
static char*
r_unique(arg)
struct load_arg *arg;
@@ -881,8 +896,12 @@ r_object(arg)
}
return r_regist(m, arg);
}
+
case TYPE_SYMBOL:
- return ID2SYM(r_symbol(arg));
+ return ID2SYM(r_symreal(arg));
+
+ case TYPE_SYMLINK:
+ return ID2SYM(r_symlink(arg));
default:
rb_raise(rb_eArgError, "dump format error(0x%x)", type);