Ruby 2.0.0p247(2013-06-27revision41674)

- Main Page
- Modules
- Data Structures
- Files

- File List
- Globals

Data Structures | Macros | Typedefs | Functions | Variables
marshal.c File Reference
`#include "ruby/ruby.h"`
`#include "ruby/io.h"`
`#include "ruby/st.h"`
`#include "ruby/util.h"`
`#include "ruby/encoding.h"`
`#include "internal.h"`
`#include <math.h>`
Include dependency graph for marshal.c:

Go to the source code of this file.

## Data Structures
struct | marshal_compat_t
struct | dump_arg
struct | dump_call_arg
struct | load_arg

## Macros
#define | BITSPERSHORT (2*CHAR_BIT)
#define | SHORTMASK ((1<<BITSPERSHORT)-1)
#define | SHORTDN(x) RSHIFT((x),BITSPERSHORT)
#define | SHORTLEN(x) (x)
#define | MARSHAL_MAJOR 4
#define | MARSHAL_MINOR 8
#define | TYPE_NIL '0'
#define | TYPE_TRUE 'T'
#define | TYPE_FALSE 'F'
#define | TYPE_FIXNUM 'i'
#define | TYPE_EXTENDED 'e'
#define | TYPE_UCLASS 'C'
#define | TYPE_OBJECT 'o'
#define | TYPE_DATA 'd'
#define | TYPE_USERDEF 'u'
#define | TYPE_USRMARSHAL 'U'
#define | TYPE_FLOAT 'f'
#define | TYPE_BIGNUM 'l'
#define | TYPE_STRING '"'
#define | TYPE_REGEXP '/'
#define | TYPE_ARRAY '['
#define | TYPE_HASH '{'
#define | TYPE_HASH_DEF '}'
#define | TYPE_STRUCT 'S'
#define | TYPE_MODULE_OLD 'M'
#define | TYPE_CLASS 'c'
#define | TYPE_MODULE 'm'
#define | TYPE_SYMBOL ':'
#define | TYPE_SYMLINK ';'
#define | TYPE_IVAR 'I'
#define | TYPE_LINK '@'
#define | MARSHAL_INFECTION (FL_TAINT|FL_UNTRUSTED)
#define | w_cstr(s, arg) w_bytes((s), strlen(s), (arg))
#define | load_mantissa(d, buf, len) (d)
#define | FLOAT_DIG 17
#define | SINGLETON_DUMP_UNABLE_P(klass)
#define | has_ivars(obj, ivtbl)
#define | r_entry(v, arg) r_entry0((v), (arg)->data->num_entries, (arg))
#define | SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
#define | r_bytes(arg) r_bytes0(r_long(arg), (arg))
#define | prohibit_ivar(type, str)
#define | rb_intern(str) rb_intern_const(str)

## Typedefs
typedef char | ruby_check_marshal_viral_flags [MARSHAL_INFECTION==(int) MARSHAL_INFECTION?1:-1]

## Functions
static int | mark_marshal_compat_i (st_data_t key, st_data_t value)
static void | mark_marshal_compat_t (void *tbl)
void | rb_marshal_define_compat (VALUE newclass, VALUE oldclass, VALUE(*dumper)(VALUE), VALUE(*loader)(VALUE, VALUE))
static void | check_dump_arg (struct dump_arg *arg, ID sym)
static void | clear_dump_arg (struct dump_arg *arg)
static void | mark_dump_arg (void *ptr)
static void | free_dump_arg (void *ptr)
static size_t | memsize_dump_arg (const void *ptr)
static const char * | must_not_be_anonymous (const char *type, VALUE path)
static VALUE | class2path (VALUE klass)
static void | w_long (long, struct dump_arg *)
static void | w_encoding (VALUE obj, long num, struct dump_call_arg *arg)
static void | w_nbyte (const char *s, long n, struct dump_arg *arg)
static void | w_byte (char c, struct dump_arg *arg)
static void | w_bytes (const char *s, long n, struct dump_arg *arg)
static void | w_short (int x, struct dump_arg *arg)
static void | w_float (double d, struct dump_arg *arg)
static void | w_symbol (ID id, struct dump_arg *arg)
static void | w_unique (VALUE s, struct dump_arg *arg)
static void | w_object (VALUE, struct dump_arg *, int)
static int | hash_each (VALUE key, VALUE value, struct dump_call_arg *arg)
static void | w_extended (VALUE klass, struct dump_arg *arg, int check)
static void | w_class (char type, VALUE obj, struct dump_arg *arg, int check)
static void | w_uclass (VALUE obj, VALUE super, struct dump_arg *arg)
static int | w_obj_each (st_data_t key, st_data_t val, st_data_t a)
static void | w_ivar (VALUE obj, st_table *tbl, struct dump_call_arg *arg)
static void | w_objivar (VALUE obj, struct dump_call_arg *arg)
| NORETURN (static inline void io_needed(void))
static void | io_needed (void)
static VALUE | marshal_dump (int argc, VALUE *argv)
static void | check_load_arg (struct load_arg *arg, ID sym)
static void | clear_load_arg (struct load_arg *arg)
static void | mark_load_arg (void *ptr)
static void | free_load_arg (void *ptr)
static size_t | memsize_load_arg (const void *ptr)
static VALUE | r_entry0 (VALUE v, st_index_t num, struct load_arg *arg)
static VALUE | r_object (struct load_arg *arg)
static ID | r_symbol (struct load_arg *arg)
static VALUE | path2class (VALUE path)
| NORETURN (static void too_short(void))
static void | too_short (void)
static st_index_t | r_prepare (struct load_arg *arg)
static unsigned char | r_byte1_buffered (struct load_arg *arg)
static int | r_byte (struct load_arg *arg)
static void | long_toobig (int size)
static long | r_long (struct load_arg *arg)
static VALUE | r_bytes1 (long len, struct load_arg *arg)
static VALUE | r_bytes1_buffered (long len, struct load_arg *arg)
static VALUE | r_bytes0 (long len, struct load_arg *arg)
static int | id2encidx (ID id, VALUE val)
static ID | r_symlink (struct load_arg *arg)
static ID | r_symreal (struct load_arg *arg, int ivar)
static VALUE | r_unique (struct load_arg *arg)
static VALUE | r_string (struct load_arg *arg)
static VALUE | r_leave (VALUE v, struct load_arg *arg)
static void | r_ivar (VALUE obj, int *has_encoding, struct load_arg *arg)
static VALUE | path2module (VALUE path)
static VALUE | obj_alloc_by_klass (VALUE klass, struct load_arg *arg, VALUE *oldclass)
static VALUE | obj_alloc_by_path (VALUE path, struct load_arg *arg)
static VALUE | append_extmod (VALUE obj, VALUE extmod)
static VALUE | r_object0 (struct load_arg *arg, int *ivp, VALUE extmod)
static VALUE | marshal_load (int argc, VALUE *argv)
void | Init_marshal (void)
VALUE | rb_marshal_dump (VALUE obj, VALUE port)
VALUE | rb_marshal_load (VALUE port)

## Variables
static ID | s_dump
static ID | s_load
static ID | s_mdump
static ID | s_mload
static ID | s_dump_data
static ID | s_load_data
static ID | s_alloc
static ID | s_call
static ID | s_getbyte
static ID | s_read
static ID | s_write
static ID | s_binmode
static st_table * | compat_allocator_tbl
static VALUE | compat_allocator_tbl_wrapper
static const rb_data_type_t | dump_arg_data
static const rb_data_type_t | load_arg_data

## Macro Definition Documentation

#define BITSPERSHORT (2*CHAR_BIT)

Definition at line 27 of file marshal.c.

#define FLOAT_DIG 17

Definition at line 351 of file marshal.c.

Referenced by w_float().

#define has_ivars | ( |  | obj,
|  |  | ivtbl
| ) |  |

Value:
(((ivtbl) = rb_generic_ivar_table(obj)) != 0 || \
(!SPECIAL_CONST_P(obj) && !ENCODING_IS_ASCII8BIT(obj)))

Referenced by w_object().

#define load_mantissa | ( |  | d,
|  |  | buf,
|  |  | len
| ) |  | (d)

Definition at line 345 of file marshal.c.

Referenced by r_object0().

#define MARSHAL_INFECTION (FL_TAINT|FL_UNTRUSTED)

Definition at line 133 of file marshal.c.

#define MARSHAL_MAJOR 4

Definition at line 50 of file marshal.c.

Referenced by Init_marshal(), marshal_dump(), and marshal_load().

#define MARSHAL_MINOR 8

Definition at line 51 of file marshal.c.

Referenced by Init_marshal(), marshal_dump(), and marshal_load().

#define prohibit_ivar | ( |  | type,
|  |  | str
| ) |  |

Value:
do { \
if (!ivp || !*ivp) break; \
rb_raise(rb_eTypeError, \
"can't override instance variable of "type" `%"PRIsVALUE"'", \
(str)); \
} while (0)

Definition at line 1442 of file marshal.c.

Referenced by r_object0().

#define r_bytes | ( |  | arg) |  | r_bytes0(r_long(arg), (arg))

Definition at line 1209 of file marshal.c.

Referenced by r_object0(), r_string(), and r_symreal().

#define r_entry | ( |  | v,
|  |  | arg
| ) |  | r_entry0((v), (arg)->data->num_entries, (arg))

Definition at line 1029 of file marshal.c.

Referenced by r_object0().

#define rb_intern | ( |  | str) |  | rb_intern_const(str)

#define SHORTDN | ( |  | x) |  | RSHIFT((x),BITSPERSHORT)

Definition at line 29 of file marshal.c.

Referenced by w_object().

#define SHORTLEN | ( |  | x) |  | (x)

Definition at line 32 of file marshal.c.

Referenced by w_object().

#define SHORTMASK ((1<<BITSPERSHORT)-1)

Definition at line 28 of file marshal.c.

Referenced by w_object().

#define SIGN_EXTEND_CHAR | ( |  | c) |  | ((((unsigned char)(c)) ^ 128) - 128)

Definition at line 1111 of file marshal.c.

Referenced by r_long().

#define SINGLETON_DUMP_UNABLE_P | ( |  | klass) |  |

Value:
(RCLASS_M_TBL(klass)->num_entries || \
(RCLASS_IV_TBL(klass) && RCLASS_IV_TBL(klass)->num_entries > 1))

Definition at line 460 of file marshal.c.

Referenced by w_extended().

#define TYPE_ARRAY '['

Definition at line 68 of file marshal.c.

Referenced by r_object0(), and w_object().

#define TYPE_BIGNUM 'l'

Definition at line 65 of file marshal.c.

Referenced by r_object0(), and w_object().

#define TYPE_CLASS 'c'

Definition at line 73 of file marshal.c.

Referenced by r_object0(), and w_object().

#define TYPE_DATA 'd'

Definition at line 61 of file marshal.c.

Referenced by r_object0(), and w_object().

#define TYPE_EXTENDED 'e'

Definition at line 58 of file marshal.c.

Referenced by r_object0(), and w_extended().

#define TYPE_FALSE 'F'

Definition at line 55 of file marshal.c.

Referenced by r_object0(), and w_object().

#define TYPE_FIXNUM 'i'

Definition at line 56 of file marshal.c.

Referenced by r_object0(), and w_object().

#define TYPE_FLOAT 'f'

Definition at line 64 of file marshal.c.

Referenced by r_object0(), and w_object().

#define TYPE_HASH '{'

Definition at line 69 of file marshal.c.

Referenced by r_object0(), and w_object().

#define TYPE_HASH_DEF '}'

Definition at line 70 of file marshal.c.

Referenced by r_object0(), and w_object().

#define TYPE_IVAR 'I'

Definition at line 79 of file marshal.c.

Referenced by r_object0(), r_symbol(), w_object(), and w_symbol().

#define TYPE_LINK '@'

Definition at line 80 of file marshal.c.

Referenced by r_object0(), and w_object().

#define TYPE_MODULE 'm'

Definition at line 74 of file marshal.c.

Referenced by r_object0(), and w_object().

#define TYPE_MODULE_OLD 'M'

Definition at line 72 of file marshal.c.

Referenced by r_object0().

#define TYPE_NIL '0'

Definition at line 53 of file marshal.c.

Referenced by r_object0(), and w_object().

#define TYPE_OBJECT 'o'

Definition at line 60 of file marshal.c.

Referenced by r_object0(), and w_object().

#define TYPE_REGEXP '/'

Definition at line 67 of file marshal.c.

Referenced by r_object0(), and w_object().

#define TYPE_STRING '"'

Definition at line 66 of file marshal.c.

Referenced by r_object0(), and w_object().

#define TYPE_STRUCT 'S'

Definition at line 71 of file marshal.c.

Referenced by r_object0(), and w_object().

#define TYPE_SYMBOL ':'

Definition at line 76 of file marshal.c.

Referenced by r_object0(), r_symbol(), and w_symbol().

#define TYPE_SYMLINK ';'

Definition at line 77 of file marshal.c.

Referenced by r_object0(), r_symbol(), and w_symbol().

#define TYPE_TRUE 'T'

Definition at line 54 of file marshal.c.

Referenced by r_object0(), and w_object().

#define TYPE_UCLASS 'C'

Definition at line 59 of file marshal.c.

Referenced by r_object0(), and w_uclass().

#define TYPE_USERDEF 'u'

Definition at line 62 of file marshal.c.

Referenced by r_object0(), and w_object().

#define TYPE_USRMARSHAL 'U'

Definition at line 63 of file marshal.c.

Referenced by r_object0(), and w_object().

#define w_cstr | ( |  | s,
|  |  | arg
| ) |  | w_bytes((s), strlen(s), (arg))

Definition at line 248 of file marshal.c.

Referenced by w_float().

## Typedef Documentation

typedef char ruby_check_marshal_viral_flags[MARSHAL_INFECTION==(int) MARSHAL_INFECTION?1:-1]

Definition at line 134 of file marshal.c.

## Function Documentation

static VALUE append_extmod | ( | VALUE | obj,
|  | VALUE | extmod
| ) |  |
| static

Definition at line 1432 of file marshal.c.

References i, RARRAY_LEN, RARRAY_PTR, and rb_extend_object().

Referenced by r_object0().

static void check_dump_arg | ( | struct dump_arg * | arg,
|  | ID | sym
| ) |  |
| static

Definition at line 152 of file marshal.c.

References rb_eRuntimeError, rb_id2name(), rb_raise(), and dump_arg::symbols.

Referenced by marshal_dump(), and w_object().

static void check_load_arg | ( | struct load_arg * | arg,
|  | ID | sym
| ) |  |
| static

Definition at line 991 of file marshal.c.

References rb_eRuntimeError, rb_id2name(), rb_raise(), and load_arg::symbols.

Referenced by r_byte(), r_byte1_buffered(), r_bytes1(), r_bytes1_buffered(), r_leave(), and r_object0().

static VALUE class2path | ( | VALUE | klass) |  |
| static

Definition at line 208 of file marshal.c.

References must_not_be_anonymous(), rb_class_path(), rb_class_real(), rb_eTypeError, rb_path_to_class(), rb_raise(), RB_TYPE_P, and T_CLASS.

Referenced by w_class(), w_object(), and w_uclass().

static void clear_dump_arg | ( | struct dump_arg * | arg) |  |
| static

Definition at line 866 of file marshal.c.

References dump_arg::compat_tbl, dump_arg::data, dump_arg::encodings, st_free_table(), and dump_arg::symbols.

Referenced by free_dump_arg(), and marshal_dump().

static void clear_load_arg | ( | struct load_arg * | arg) |  |
| static

Definition at line 1874 of file marshal.c.

References load_arg::buf, load_arg::buflen, load_arg::compat_tbl, load_arg::data, load_arg::offset, load_arg::readable, st_free_table(), load_arg::symbols, and xfree.

Referenced by free_load_arg(), and marshal_load().

static void free_dump_arg | ( | void * | ptr) |  |
| static

Definition at line 174 of file marshal.c.

References clear_dump_arg(), and xfree.

static void free_load_arg | ( | void * | ptr) |  |
| static

Definition at line 1012 of file marshal.c.

References clear_load_arg(), and xfree.

static int hash_each | ( | VALUE | key,
|  | VALUE | value,
|  | struct dump_call_arg * | arg
| ) |  |
| static

Definition at line 453 of file marshal.c.

References dump_call_arg::arg, dump_call_arg::limit, ST_CONTINUE, and w_object().

Referenced by w_object().

static int id2encidx | ( | ID | id,
|  | VALUE | val
| ) |  |
| static

Definition at line 1238 of file marshal.c.

References Qfalse, Qtrue, rb_enc_find_index(), rb_id_encoding(), rb_intern, rb_usascii_encindex(), rb_utf8_encindex(), and StringValueCStr.

Referenced by r_ivar(), and r_symreal().

void Init_marshal | ( | void | ) |  |

Definition at line 2077 of file marshal.c.

References compat_allocator_tbl_wrapper, Data_Wrap_Struct, INT2FIX, mark_marshal_compat_t(), marshal_dump(), marshal_load(), MARSHAL_MAJOR, MARSHAL_MINOR, rb_cData, rb_define_const(), rb_define_module(), rb_define_module_function(), rb_gc_register_mark_object(), rb_intern, s_alloc, s_binmode, s_call, s_dump, s_dump_data, s_getbyte, s_load, s_load_data, s_mdump, s_mload, s_read, s_write, and st_init_numtable().

static void io_needed | ( | void | ) |  |
| inline static

Definition at line 883 of file marshal.c.

References rb_eTypeError, and rb_raise().

Referenced by marshal_dump(), and marshal_load().

static void long_toobig | ( | int | size) |  |
| static

Definition at line 1100 of file marshal.c.

References rb_eTypeError, rb_raise(), and STRINGIZE.

Referenced by r_long().

static void mark_dump_arg | ( | void * | ptr) |  |
| static

Definition at line 163 of file marshal.c.

References dump_arg::compat_tbl, dump_arg::data, p, rb_gc_mark(), rb_mark_hash(), rb_mark_set(), dump_arg::str, and dump_arg::symbols.

static void mark_load_arg | ( | void * | ptr) |  |
| static

Definition at line 1002 of file marshal.c.

References load_arg::compat_tbl, load_arg::data, p, rb_mark_hash(), rb_mark_tbl(), and load_arg::symbols.

static int mark_marshal_compat_i | ( | st_data_t | key,
|  | st_data_t | value
| ) |  |
| static

Definition at line 97 of file marshal.c.

References marshal_compat_t::newclass, marshal_compat_t::oldclass, p, rb_gc_mark(), and ST_CONTINUE.

Referenced by mark_marshal_compat_t().

static void mark_marshal_compat_t | ( | void * | tbl) |  |
| static

Definition at line 106 of file marshal.c.

References mark_marshal_compat_i(), and st_foreach().

Referenced by Init_marshal().

static VALUE marshal_dump | ( | int | argc,
|  | VALUE * | argv
| ) |  |
| static

Definition at line 923 of file marshal.c.

References arg, check_dump_arg(), clear_dump_arg(), dump_arg::compat_tbl, dump_arg::data, dump_arg::dest, dump_arg_data, dump_arg::encodings, FIX2INT, FIXNUM_P, dump_arg::infection, io_needed(), dump_call_arg::limit, MARSHAL_MAJOR, MARSHAL_MINOR, NIL_P, NUM2INT, dump_call_arg::obj, Qnil, Qundef, rb_cData, rb_check_funcall(), RB_GC_GUARD, rb_io_write(), rb_respond_to(), rb_scan_args(), rb_str_buf_new(), rb_str_resize(), s_binmode, s_write, st_init_numtable(), dump_arg::str, dump_arg::symbols, TypedData_Make_Struct, w_byte(), and w_object().

Referenced by Init_marshal(), and rb_marshal_dump().

static VALUE marshal_load | ( | int | argc,
|  | VALUE * | argv
| ) |  |
| static

Definition at line 1907 of file marshal.c.

References arg, load_arg::buf, clear_load_arg(), load_arg::compat_tbl, load_arg::data, FL_TAINT, FL_TEST, FL_UNTRUSTED, load_arg::infection, io_needed(), load_arg_data, major, MARSHAL_MAJOR, MARSHAL_MINOR, minor, NIL_P, load_arg::offset, load_arg::proc, r_byte(), r_object(), rb_cData, rb_check_funcall(), rb_check_string_type(), rb_eTypeError, RB_GC_GUARD, rb_raise(), rb_respond_to(), rb_scan_args(), rb_warn(), load_arg::readable, RTEST, ruby_verbose, s_binmode, s_getbyte, s_read, load_arg::src, st_init_numtable(), load_arg::symbols, TypedData_Make_Struct, v, and xmalloc.

Referenced by Init_marshal(), and rb_marshal_load().

static size_t memsize_dump_arg | ( | const void * | ptr) |  |
| static

Definition at line 181 of file marshal.c.

static size_t memsize_load_arg | ( | const void * | ptr) |  |
| static

Definition at line 1019 of file marshal.c.

static const char* must_not_be_anonymous | ( | const char * | type,
|  | VALUE | path
| ) |  |
| static

Definition at line 192 of file marshal.c.

References rb_enc_asciicompat, rb_enc_get(), rb_eTypeError, rb_raise(), RSTRING_LEN, and RSTRING_PTR.

Referenced by class2path(), and w_unique().

NORETURN | ( | static inline void | io_neededvoid) |  |

NORETURN | ( | static void | too_shortvoid) |  |

static VALUE obj_alloc_by_klass | ( | VALUE | klass,
|  | struct load_arg * | arg,
|  | VALUE * | oldclass
| ) |  |
| static

Definition at line 1407 of file marshal.c.

References load_arg::compat_tbl, marshal_compat_t::oldclass, rb_get_alloc_func(), rb_obj_alloc(), st_insert(), and st_lookup().

Referenced by obj_alloc_by_path(), and r_object0().

static VALUE obj_alloc_by_path | ( | VALUE | path,
|  | struct load_arg * | arg
| ) |  |
| static

Definition at line 1426 of file marshal.c.

References obj_alloc_by_klass(), and path2class().

Referenced by r_object0().

static VALUE path2class | ( | VALUE | path) |  |
| static

Definition at line 1385 of file marshal.c.

References PRIsVALUE, rb_eArgError, rb_path_to_class(), rb_raise(), RB_TYPE_P, T_CLASS, and v.

Referenced by obj_alloc_by_path(), and r_object0().

static VALUE path2module | ( | VALUE | path) |  |
| static

Definition at line 1396 of file marshal.c.

References PRIsVALUE, rb_eArgError, rb_path_to_class(), rb_raise(), RB_TYPE_P, T_MODULE, and v.

Referenced by r_object0().

static int r_byte | ( | struct load_arg * | arg) |  |
| static

Definition at line 1073 of file marshal.c.

References load_arg::buflen, c, check_load_arg(), NIL_P, NUM2CHR, load_arg::offset, r_byte1_buffered(), rb_eof_error(), rb_funcall2(), RB_TYPE_P, load_arg::readable, RSTRING_LEN, RSTRING_PTR, s_getbyte, load_arg::src, T_STRING, too_short(), and v.

Referenced by marshal_load(), r_long(), r_object0(), and r_symbol().

static unsigned char r_byte1_buffered | ( | struct load_arg * | arg) |  |
| static

Definition at line 1052 of file marshal.c.

References load_arg::buf, load_arg::buflen, check_load_arg(), FL_TEST, load_arg::infection, LONG2NUM, NIL_P, load_arg::offset, rb_funcall2(), readable(), load_arg::readable, RSTRING_LEN, RSTRING_PTR, s_read, load_arg::src, StringValue, and too_short().

Referenced by r_byte().

static VALUE r_bytes0 | ( | long | len,
|  | struct load_arg * | arg
| ) |  |
| static

Definition at line 1212 of file marshal.c.

References load_arg::buflen, load_arg::offset, r_bytes1(), r_bytes1_buffered(), rb_str_new(), RB_TYPE_P, load_arg::readable, RSTRING_LEN, RSTRING_PTR, load_arg::src, T_STRING, and too_short().

Referenced by r_object0().

static VALUE r_bytes1 | ( | long | len,
|  | struct load_arg * | arg
| ) |  |
| static

Definition at line 1148 of file marshal.c.

References check_load_arg(), FL_TEST, load_arg::infection, LONG2NUM, NIL_P, rb_funcall2(), RSTRING_LEN, s_read, load_arg::src, StringValue, and too_short().

Referenced by r_bytes0().

static VALUE r_bytes1_buffered | ( | long | len,
|  | struct load_arg * | arg
| ) |  |
| static

Definition at line 1163 of file marshal.c.

References load_arg::buf, load_arg::buflen, check_load_arg(), FL_TEST, load_arg::infection, LONG2NUM, NIL_P, load_arg::offset, rb_funcall2(), rb_str_cat(), rb_str_new(), readable(), load_arg::readable, RSTRING_LEN, RSTRING_PTR, s_read, load_arg::src, StringValue, and too_short().

Referenced by r_bytes0().

static VALUE r_entry0 | ( | VALUE | v,
|  | st_index_t | num,
|  | struct load_arg * | arg
| ) |  |
| static

Definition at line 1322 of file marshal.c.

References load_arg::compat_tbl, load_arg::data, FL_SET, load_arg::infection, Qundef, RB_TYPE_P, st_insert(), st_lookup(), T_CLASS, T_MODULE, and v.

Referenced by r_object0().

static void r_ivar | ( | VALUE | obj,
|  | int * | has_encoding,
|  | struct load_arg * | arg
| ) |  |
| static

Definition at line 1363 of file marshal.c.

References id2encidx(), r_long(), r_object(), r_symbol(), rb_enc_associate_index(), rb_ivar_set(), TRUE, and val.

Referenced by r_object0().

static VALUE r_leave | ( | VALUE | v,
|  | struct load_arg * | arg
| ) |  |
| static

Definition at line 1341 of file marshal.c.

References check_load_arg(), CLASS_OF, load_arg::compat_tbl, key, marshal_compat_t::loader, load_arg::proc, rb_funcall(), rb_get_alloc_func(), s_call, st_delete(), st_lookup(), and v.

Referenced by r_object0().

static long r_long | ( | struct load_arg * | arg) |  |
| static

Definition at line 1115 of file marshal.c.

References c, i, long_toobig(), r_byte(), and SIGN_EXTEND_CHAR.

Referenced by r_ivar(), r_object0(), r_symlink(), and r_symreal().

static VALUE r_object | ( | struct load_arg * | arg) |  |
| static

Definition at line 1868 of file marshal.c.

References Qnil, and r_object0().

Referenced by marshal_load(), r_ivar(), r_object0(), and r_symreal().

static VALUE r_object0 | ( | struct load_arg * | arg,
|  | int * | ivp,
|  | VALUE | extmod
| ) |  |
| static

Definition at line 1450 of file marshal.c.

References append_extmod(), BDIGIT, c, check_load_arg(), load_arg::data, DBL2NUM, FALSE, FL_SINGLETON, FL_TEST, i, id, ID2SYM, INFINITY, key, link(), load_mantissa, LONG2FIX, MEMCPY, MEMZERO, NAN, NEWOBJ_OF, NIL_P, NULL, obj_alloc_by_klass(), obj_alloc_by_path(), options(), p, path2class(), path2module(), load_arg::proc, prohibit_ivar, Qfalse, Qnil, Qtrue, r_byte(), r_bytes, r_bytes0(), r_entry, r_entry0(), r_ivar(), r_leave(), r_long(), r_object(), r_prepare(), r_string(), r_symbol(), r_symlink(), r_symreal(), r_unique(), RARRAY_LEN, RARRAY_PTR, rb_ary_clear(), rb_ary_new2(), rb_ary_pop(), rb_ary_push(), rb_ary_tmp_new(), rb_big_norm(), rb_big_resize(), rb_cBignum, rb_class2name(), rb_class_inherited_p(), rb_eArgError, rb_eTypeError, rb_extend_object(), rb_funcall(), rb_funcall2(), rb_hash_aset(), rb_hash_new(), rb_id2name(), rb_obj_alloc(), rb_obj_respond_to(), rb_path_to_class(), rb_raise(), rb_reg_new_str(), rb_special_const_p(), rb_str_resize(), rb_str_set_len(), rb_struct_initialize(), rb_struct_s_members(), RB_TYPE_P, RBASIC, RBIGNUM_DIGITS, RBIGNUM_LEN, RBIGNUM_SET_SIGN, load_arg::readable, RHASH_IFNONE, RSTRING_LEN, RSTRING_PTR, RTEST, s_call, s_load, s_load_data, s_mload, shift(), SIZEOF_BDIGITS, st_lookup(), strtod, SYM2ID, T_BIGNUM, T_CLASS, T_DATA, T_MODULE, T_OBJECT, T_STRUCT, TRUE, type, TYPE, TYPE_ARRAY, TYPE_BIGNUM, TYPE_CLASS, TYPE_DATA, TYPE_EXTENDED, TYPE_FALSE, TYPE_FIXNUM, TYPE_FLOAT, TYPE_HASH, TYPE_HASH_DEF, TYPE_IVAR, TYPE_LINK, TYPE_MODULE, TYPE_MODULE_OLD, TYPE_NIL, TYPE_OBJECT, TYPE_REGEXP, TYPE_STRING, TYPE_STRUCT, TYPE_SYMBOL, TYPE_SYMLINK, TYPE_TRUE, TYPE_UCLASS, TYPE_USERDEF, TYPE_USRMARSHAL, and v.

Referenced by r_object().

static st_index_t r_prepare | ( | struct load_arg * | arg) |  |
| static

Definition at line 1043 of file marshal.c.

References load_arg::data, st_table::num_entries, Qundef, and st_insert().

Referenced by r_object0().

static VALUE r_string | ( | struct load_arg * | arg) |  |
| static

Definition at line 1316 of file marshal.c.

References r_bytes.

Referenced by r_object0().

static ID r_symbol | ( | struct load_arg * | arg) |  |
| static

Definition at line 1288 of file marshal.c.

References r_byte(), r_symlink(), r_symreal(), rb_eArgError, rb_raise(), type, TYPE_IVAR, TYPE_SYMBOL, and TYPE_SYMLINK.

Referenced by r_ivar(), r_object0(), r_symreal(), and r_unique().

static ID r_symlink | ( | struct load_arg * | arg) |  |
| static

Definition at line 1253 of file marshal.c.

References id, r_long(), rb_eArgError, rb_raise(), st_lookup(), and load_arg::symbols.

Referenced by r_object0(), and r_symbol().

static ID r_symreal | ( | struct load_arg * | arg,
|  | int | ivar
| ) |  |
| static

Definition at line 1265 of file marshal.c.

References id, id2encidx(), st_table::num_entries, r_bytes, r_long(), r_object(), r_symbol(), rb_enc_associate_index(), rb_intern_str, st_insert(), and load_arg::symbols.

Referenced by r_object0(), and r_symbol().

static VALUE r_unique | ( | struct load_arg * | arg) |  |
| static

Definition at line 1310 of file marshal.c.

References r_symbol(), and rb_id2str().

Referenced by r_object0().

void rb_marshal_define_compat | ( | VALUE | newclass,
|  | VALUE | oldclass,
|  | VALUE(*)(VALUE) | dumper,
|  | VALUE(*)(VALUE, VALUE) | loader
| ) |  |

Definition at line 113 of file marshal.c.

References ALLOC, marshal_compat_t::dumper, marshal_compat_t::loader, marshal_compat_t::newclass, marshal_compat_t::oldclass, Qnil, rb_eTypeError, rb_get_alloc_func(), rb_raise(), and st_insert().

Referenced by Init_Complex(), Init_Range(), Init_Rational(), and Init_vm_backtrace().

VALUE rb_marshal_dump | ( | VALUE | obj,
|  | VALUE | port
| ) |  |

Definition at line 2111 of file marshal.c.

References argc, argv, marshal_dump(), and NIL_P.

VALUE rb_marshal_load | ( | VALUE | port) |  |

Definition at line 2123 of file marshal.c.

References marshal_load().

Referenced by date_s__load().

static void too_short | ( | void | ) |  |
| static

Definition at line 1037 of file marshal.c.

References rb_eArgError, and rb_raise().

Referenced by r_byte(), r_byte1_buffered(), r_bytes0(), r_bytes1(), and r_bytes1_buffered().

static void w_byte | ( | char | c,
|  | struct dump_arg * | arg
| ) |  |
| static

Definition at line 236 of file marshal.c.

References w_nbyte().

Referenced by marshal_dump(), w_class(), w_extended(), w_long(), w_object(), w_short(), w_symbol(), and w_uclass().

static void w_bytes | ( | const char * | s,
|  | long | n,
|  | struct dump_arg * | arg
| ) |  |
| static

Definition at line 242 of file marshal.c.

References w_long(), and w_nbyte().

Referenced by w_float(), w_object(), and w_symbol().

static void w_class | ( | char | type,
|  | VALUE | obj,
|  | struct dump_arg * | arg,
|  | int | check
| ) |  |
| static

Definition at line 484 of file marshal.c.

References class2path(), CLASS_OF, dump_arg::compat_tbl, rb_class_real(), st_lookup(), w_byte(), w_extended(), and w_unique().

Referenced by w_object().

static void w_encoding | ( | VALUE | obj,
|  | long | num,
|  | struct dump_call_arg * | arg
| ) |  |
| static

Definition at line 528 of file marshal.c.

References dump_call_arg::arg, dump_arg::encodings, dump_call_arg::limit, name, Qfalse, Qtrue, rb_enc_from_index(), rb_enc_get_index(), rb_enc_name, rb_id_encoding(), rb_intern, rb_str_new2, rb_usascii_encindex(), rb_utf8_encindex(), st_init_strcasetable(), st_insert(), st_lookup(), w_long(), w_object(), and w_symbol().

Referenced by w_ivar(), w_objivar(), and w_symbol().

static void w_extended | ( | VALUE | klass,
|  | struct dump_arg * | arg,
|  | int | check
| ) |  |
| static

Definition at line 465 of file marshal.c.

References BUILTIN_TYPE, FL_SINGLETON, FL_TEST, rb_class_name(), rb_eTypeError, rb_raise(), RBASIC, RCLASS_ORIGIN, RCLASS_SUPER, SINGLETON_DUMP_UNABLE_P, T_ICLASS, TYPE_EXTENDED, w_byte(), and w_unique().

Referenced by w_class(), and w_uclass().

static void w_float | ( | double | d,
|  | struct dump_arg * | arg
| ) |  |
| static

Definition at line 355 of file marshal.c.

References FLOAT_DIG, isinf(), isnan, p, ruby_dtoa(), snprintf, w_bytes(), w_cstr, and xfree.

Referenced by w_object().

static void w_ivar | ( | VALUE | obj,
|  | st_table * | tbl,
|  | struct dump_call_arg * | arg
| ) |  |
| static

Definition at line 565 of file marshal.c.

References st_table::num_entries, st_foreach_safe(), w_encoding(), and w_obj_each().

Referenced by w_object().

static void w_long | ( | long | x,
|  | struct dump_arg * | arg
| ) |  |
| static

Definition at line 258 of file marshal.c.

References buf, i, rb_eTypeError, rb_raise(), and w_byte().

Referenced by w_bytes(), w_encoding(), w_object(), and w_symbol().

static void w_nbyte | ( | const char * | s,
|  | long | n,
|  | struct dump_arg * | arg
| ) |  |
| static

Definition at line 224 of file marshal.c.

References buf, dump_arg::dest, dump_arg::infection, rb_io_write(), rb_str_buf_cat(), rb_str_resize(), RBASIC, RSTRING_LEN, and dump_arg::str.

Referenced by w_byte(), and w_bytes().

static int w_obj_each | ( | st_data_t | key,
|  | st_data_t | val,
|  | st_data_t | a
| ) |  |
| static

Definition at line 514 of file marshal.c.

References dump_call_arg::arg, arg, dump_call_arg::limit, rb_id_encoding(), rb_intern, ST_CONTINUE, w_object(), and w_symbol().

Referenced by w_ivar(), and w_objivar().

static void w_object | ( | VALUE | obj,
|  | struct dump_arg * | arg,
|  | int | limit
| ) |  |
| static

Definition at line 595 of file marshal.c.

References dump_call_arg::arg, arg, BDIGIT, BUILTIN_TYPE, check_dump_arg(), class2path(), dump_arg::compat_tbl, dump_arg::data, marshal_compat_t::dumper, FALSE, FIX2INT, FIX2LONG, FIXNUM_P, FL_SINGLETON, FL_TEST, FL_USER2, FLONUM_P, has_ivars, hash_each(), i, dump_arg::infection, INT2NUM, dump_call_arg::limit, NIL_P, st_table::num_entries, dump_call_arg::obj, Qfalse, Qnil, Qtrue, RARRAY_LEN, RARRAY_PTR, rb_cArray, rb_cHash, rb_cRegexp, rb_cString, rb_eArgError, rb_eRuntimeError, rb_eTypeError, rb_funcall2(), RB_GC_GUARD, rb_get_alloc_func(), rb_hash_foreach(), rb_int2big(), rb_obj_classname(), rb_obj_respond_to(), rb_raise(), rb_reg_options(), rb_struct_members(), RB_TYPE_P, RBASIC, RBIGNUM_DIGITS, RBIGNUM_LEN, RBIGNUM_SIGN, RFLOAT_VALUE, RHASH_IFNONE, RHASH_SIZE, RREGEXP_SRC_LEN, RREGEXP_SRC_PTR, RSTRING_LEN, RSTRING_PTR, RSTRUCT_LEN, RSTRUCT_PTR, s_dump, s_dump_data, s_mdump, SHORTDN, SHORTLEN, SHORTMASK, SIZEOF_BDIGITS, st_add_direct(), st_insert(), st_lookup(), SYM2ID, SYMBOL_P, T_ARRAY, T_BIGNUM, T_CLASS, T_DATA, T_FLOAT, T_HASH, T_MODULE, T_OBJECT, T_REGEXP, T_STRING, T_STRUCT, TRUE, TYPE_ARRAY, TYPE_BIGNUM, TYPE_CLASS, TYPE_DATA, TYPE_FALSE, TYPE_FIXNUM, TYPE_FLOAT, TYPE_HASH, TYPE_HASH_DEF, TYPE_IVAR, TYPE_LINK, TYPE_MODULE, TYPE_NIL, TYPE_OBJECT, TYPE_REGEXP, TYPE_STRING, TYPE_STRUCT, TYPE_TRUE, TYPE_USERDEF, TYPE_USRMARSHAL, v, w_byte(), w_bytes(), w_class(), w_float(), w_ivar(), w_long(), w_objivar(), w_short(), w_symbol(), and w_uclass().

Referenced by hash_each(), marshal_dump(), w_encoding(), and w_obj_each().

static void w_objivar | ( | VALUE | obj,
|  | struct dump_call_arg * | arg
| ) |  |
| static

Definition at line 576 of file marshal.c.

References i, Qundef, rb_ivar_foreach(), ROBJECT_IVPTR, ROBJECT_NUMIV, w_encoding(), and w_obj_each().

Referenced by w_object().

static void w_short | ( | int | x,
|  | struct dump_arg * | arg
| ) |  |
| static

Definition at line 251 of file marshal.c.

References w_byte().

Referenced by w_object().

static void w_symbol | ( | ID | id,
|  | struct dump_arg * | arg
| ) |  |
| static

Definition at line 408 of file marshal.c.

References dump_call_arg::arg, arg, ENC_CODERANGE_7BIT, dump_call_arg::limit, st_table::num_entries, PRIdVALUE, rb_enc_get_index(), rb_enc_str_coderange(), rb_eTypeError, rb_id2str(), rb_raise(), rb_usascii_encindex(), RSTRING_LEN, RSTRING_PTR, st_add_direct(), st_lookup(), sym, dump_arg::symbols, TYPE_IVAR, TYPE_SYMBOL, TYPE_SYMLINK, w_byte(), w_bytes(), w_encoding(), and w_long().

Referenced by w_encoding(), w_obj_each(), w_object(), and w_unique().

static void w_uclass | ( | VALUE | obj,
|  | VALUE | super,
|  | struct dump_arg * | arg
| ) |  |
| static

Definition at line 501 of file marshal.c.

References class2path(), CLASS_OF, rb_class_real(), TRUE, TYPE_UCLASS, w_byte(), w_extended(), and w_unique().

Referenced by w_object().

static void w_unique | ( | VALUE | s,
|  | struct dump_arg * | arg
| ) |  |
| static

Definition at line 444 of file marshal.c.

References must_not_be_anonymous(), rb_intern_str, and w_symbol().

Referenced by w_class(), w_extended(), and w_uclass().

## Variable Documentation

st_table* compat_allocator_tbl
| static

Definition at line 93 of file marshal.c.

VALUE compat_allocator_tbl_wrapper
| static

Definition at line 94 of file marshal.c.

Referenced by Init_marshal().

const rb_data_type_t dump_arg_data
| static

Initial value:
= {
"dump_arg",
{mark_dump_arg, free_dump_arg, memsize_dump_arg,},
}

Definition at line 186 of file marshal.c.

Referenced by marshal_dump().

const rb_data_type_t load_arg_data
| static

Initial value:
= {
"load_arg",
{mark_load_arg, free_load_arg, memsize_load_arg,},
}

Definition at line 1024 of file marshal.c.

Referenced by marshal_load().

ID s_alloc
| static

Definition at line 83 of file marshal.c.

Referenced by Init_marshal().

ID s_binmode
| static

Definition at line 84 of file marshal.c.

Referenced by Init_marshal(), marshal_dump(), and marshal_load().

ID s_call
| static

Definition at line 83 of file marshal.c.

Referenced by Init_marshal(), r_leave(), and r_object0().

ID s_dump
| static

Definition at line 82 of file marshal.c.

Referenced by Init_marshal(), and w_object().

ID s_dump_data
| static

Definition at line 83 of file marshal.c.

Referenced by Init_marshal(), and w_object().

ID s_getbyte
| static

Definition at line 84 of file marshal.c.

Referenced by Init_marshal(), marshal_load(), and r_byte().

ID s_load
| static

Definition at line 82 of file marshal.c.

Referenced by Init_marshal(), and r_object0().

ID s_load_data
| static

Definition at line 83 of file marshal.c.

Referenced by Init_marshal(), and r_object0().

ID s_mdump
| static

Definition at line 82 of file marshal.c.

Referenced by Init_marshal(), and w_object().

ID s_mload
| static

Definition at line 82 of file marshal.c.

Referenced by Init_marshal(), and r_object0().

ID s_read
| static

Definition at line 84 of file marshal.c.

Referenced by Init_marshal(), marshal_load(), r_byte1_buffered(), r_bytes1(), and r_bytes1_buffered().

ID s_write
| static

Definition at line 84 of file marshal.c.

Referenced by Init_marshal(), and marshal_dump().