diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-04-10 05:48:43 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-04-10 05:48:43 +0000 |
commit | 7194267b3bdf68ad75bd6bee8e7c6377f7b0ea2f (patch) | |
tree | 6dcd08ef584fc777cf34517136d5ce3948840e45 /marshal.c | |
parent | be72d9a5da9be284d2bdb8047e50f14e014b7835 (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.c | 41 |
1 files changed, 30 insertions, 11 deletions
@@ -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); |