Lines Matching refs:arg

147     struct dump_arg *arg;
152 check_dump_arg(struct dump_arg *arg, ID sym)
154 if (!arg->symbols) {
160 static void clear_dump_arg(struct dump_arg *arg);
221 static void w_encoding(VALUE obj, long num, struct dump_call_arg *arg);
224 w_nbyte(const char *s, long n, struct dump_arg *arg)
226 VALUE buf = arg->str;
228 RBASIC(buf)->flags |= arg->infection;
229 if (arg->dest && RSTRING_LEN(buf) >= BUFSIZ) {
230 rb_io_write(arg->dest, buf);
236 w_byte(char c, struct dump_arg *arg)
238 w_nbyte(&c, 1, arg);
242 w_bytes(const char *s, long n, struct dump_arg *arg)
244 w_long(n, arg);
245 w_nbyte(s, n, arg);
248 #define w_cstr(s, arg) w_bytes((s), strlen(s), (arg))
251 w_short(int x, struct dump_arg *arg)
253 w_byte((char)((x >> 0) & 0xff), arg);
254 w_byte((char)((x >> 8) & 0xff), arg);
258 w_long(long x, struct dump_arg *arg)
271 w_byte(0, arg);
275 w_byte((char)(x + 5), arg);
279 w_byte((char)((x - 5)&0xff), arg);
296 w_byte(buf[i], arg);
355 w_float(double d, struct dump_arg *arg)
361 if (d < 0) w_cstr("-inf", arg);
362 else w_cstr("inf", arg);
365 w_cstr("nan", arg);
368 if (1.0/d < 0) w_cstr("-0", arg);
369 else w_cstr("0", arg);
403 w_bytes(buf, len, arg);
408 w_symbol(ID id, struct dump_arg *arg)
414 if (st_lookup(arg->symbols, id, &num)) {
415 w_byte(TYPE_SYMLINK, arg);
416 w_long((long)num, arg);
429 w_byte(TYPE_IVAR, arg);
431 w_byte(TYPE_SYMBOL, arg);
432 w_bytes(RSTRING_PTR(sym), RSTRING_LEN(sym), arg);
433 st_add_direct(arg->symbols, id, arg->symbols->num_entries);
437 c_arg.arg = arg;
444 w_unique(VALUE s, struct dump_arg *arg)
447 w_symbol(rb_intern_str(s), arg);
453 hash_each(VALUE key, VALUE value, struct dump_call_arg *arg)
455 w_object(key, arg->arg, arg->limit);
456 w_object(value, arg->arg, arg->limit);
465 w_extended(VALUE klass, struct dump_arg *arg, int check)
477 w_byte(TYPE_EXTENDED, arg);
478 w_unique(path, arg);
484 w_class(char type, VALUE obj, struct dump_arg *arg, int check)
490 if (st_lookup(arg->compat_tbl, (st_data_t)obj, &real_obj)) {
494 w_extended(klass, arg, check);
495 w_byte(type, arg);
497 w_unique(path, arg);
501 w_uclass(VALUE obj, VALUE super, struct dump_arg *arg)
505 w_extended(klass, arg, TRUE);
508 w_byte(TYPE_UCLASS, arg);
509 w_unique(class2path(klass), arg);
518 struct dump_call_arg *arg = (struct dump_call_arg *)a;
522 w_symbol(id, arg->arg);
523 w_object(value, arg->arg, arg->limit);
528 w_encoding(VALUE obj, long num, struct dump_call_arg *arg)
535 w_long(num, arg->arg);
538 w_long(num + 1, arg->arg);
542 w_symbol(rb_intern("E"), arg->arg);
543 w_object(Qfalse, arg->arg, arg->limit + 1);
547 w_symbol(rb_intern("E"), arg->arg);
548 w_object(Qtrue, arg->arg, arg->limit + 1);
552 w_symbol(rb_id_encoding(), arg->arg);
554 if (!arg->arg->encodings)
555 arg->arg->encodings = st_init_strcasetable();
556 else if (st_lookup(arg->arg->encodings, (st_data_t)rb_enc_name(enc), &name))
559 st_insert(arg->arg->encodings, (st_data_t)rb_enc_name(enc), name);
561 w_object(name, arg->arg, arg->limit + 1);
565 w_ivar(VALUE obj, st_table *tbl, struct dump_call_arg *arg)
569 w_encoding(obj, num, arg);
571 st_foreach_safe(tbl, w_obj_each, (st_data_t)arg);
576 w_objivar(VALUE obj, struct dump_call_arg *arg)
588 w_encoding(obj, num, arg);
590 rb_ivar_foreach(obj, w_obj_each, (st_data_t)arg);
595 w_object(VALUE obj, struct dump_arg *arg, int limit)
610 c_arg.arg = arg;
612 if (st_lookup(arg->data, obj, &num)) {
613 w_byte(TYPE_LINK, arg);
614 w_long((long)num, arg);
619 w_byte(TYPE_NIL, arg);
622 w_byte(TYPE_TRUE, arg);
625 w_byte(TYPE_FALSE, arg);
629 w_byte(TYPE_FIXNUM, arg);
630 w_long(FIX2INT(obj), arg);
633 w_byte(TYPE_FIXNUM, arg);
634 w_long(FIX2LONG(obj), arg);
637 w_object(rb_int2big(FIX2LONG(obj)), arg, limit);
642 w_symbol(SYM2ID(obj), arg);
645 st_add_direct(arg->data, obj, arg->data->num_entries);
646 w_byte(TYPE_FLOAT, arg);
647 w_float(RFLOAT_VALUE(obj), arg);
652 arg->infection |= (int)FL_TEST(obj, MARSHAL_INFECTION);
655 st_add_direct(arg->data, obj, arg->data->num_entries);
658 check_dump_arg(arg, s_mdump);
660 if (hasiv) w_byte(TYPE_IVAR, arg);
661 w_class(TYPE_USRMARSHAL, obj, arg, FALSE);
662 w_object(v, arg, limit);
672 check_dump_arg(arg, s_dump);
677 if (hasiv) w_byte(TYPE_IVAR, arg);
679 w_byte(TYPE_IVAR, arg);
681 w_class(TYPE_USERDEF, obj, arg, FALSE);
682 w_bytes(RSTRING_PTR(v), RSTRING_LEN(v), arg);
689 st_add_direct(arg->data, obj, arg->data->num_entries);
693 st_add_direct(arg->data, obj, arg->data->num_entries);
705 st_insert(arg->compat_tbl, (st_data_t)obj, (st_data_t)real_obj);
709 if (hasiv) w_byte(TYPE_IVAR, arg);
716 w_byte(TYPE_CLASS, arg);
719 w_bytes(RSTRING_PTR(path), RSTRING_LEN(path), arg);
725 w_byte(TYPE_MODULE, arg);
728 w_bytes(RSTRING_PTR(path), RSTRING_LEN(path), arg);
734 w_byte(TYPE_FLOAT, arg);
735 w_float(RFLOAT_VALUE(obj), arg);
739 w_byte(TYPE_BIGNUM, arg);
745 w_byte(sign, arg);
746 w_long(SHORTLEN(len), arg); /* w_short? */
753 w_short(num & SHORTMASK, arg);
758 w_short(*d, arg);
766 w_uclass(obj, rb_cString, arg);
767 w_byte(TYPE_STRING, arg);
768 w_bytes(RSTRING_PTR(obj), RSTRING_LEN(obj), arg);
772 w_uclass(obj, rb_cRegexp, arg);
773 w_byte(TYPE_REGEXP, arg);
776 w_bytes(RREGEXP_SRC_PTR(obj), RREGEXP_SRC_LEN(obj), arg);
777 w_byte((char)opts, arg);
782 w_uclass(obj, rb_cArray, arg);
783 w_byte(TYPE_ARRAY, arg);
787 w_long(len, arg);
789 w_object(RARRAY_PTR(obj)[i], arg, limit);
798 w_uclass(obj, rb_cHash, arg);
800 w_byte(TYPE_HASH, arg);
807 w_byte(TYPE_HASH_DEF, arg);
809 w_long(RHASH_SIZE(obj), arg);
812 w_object(RHASH_IFNONE(obj), arg, limit);
817 w_class(TYPE_STRUCT, obj, arg, TRUE);
823 w_long(len, arg);
826 w_symbol(SYM2ID(RARRAY_PTR(mem)[i]), arg);
827 w_object(RSTRUCT_PTR(obj)[i], arg, limit);
833 w_class(TYPE_OBJECT, obj, arg, TRUE);
847 check_dump_arg(arg, s_dump_data);
848 w_class(TYPE_DATA, obj, arg, TRUE);
849 w_object(v, arg, limit);
866 clear_dump_arg(struct dump_arg *arg)
868 if (!arg->symbols) return;
869 st_free_table(arg->symbols);
870 arg->symbols = 0;
871 st_free_table(arg->data);
872 arg->data = 0;
873 st_free_table(arg->compat_tbl);
874 arg->compat_tbl = 0;
875 if (arg->encodings) {
876 st_free_table(arg->encodings);
877 arg->encodings = 0;
927 struct dump_arg *arg;
942 RB_GC_GUARD(wrapper) = TypedData_Make_Struct(rb_cData, struct dump_arg, &dump_arg_data, arg);
943 arg->dest = 0;
944 arg->symbols = st_init_numtable();
945 arg->data = st_init_numtable();
946 arg->infection = 0;
947 arg->compat_tbl = st_init_numtable();
948 arg->encodings = 0;
949 arg->str = rb_str_buf_new(0);
954 arg->dest = port;
956 check_dump_arg(arg, s_binmode);
960 port = arg->str;
963 w_byte(MARSHAL_MAJOR, arg);
964 w_byte(MARSHAL_MINOR, arg);
966 w_object(obj, arg, limit);
967 if (arg->dest) {
968 rb_io_write(arg->dest, arg->str);
969 rb_str_resize(arg->str, 0);
971 clear_dump_arg(arg);
991 check_load_arg(struct load_arg *arg, ID sym)
993 if (!arg->symbols) {
999 static void clear_load_arg(struct load_arg *arg);
1029 #define r_entry(v, arg) r_entry0((v), (arg)->data->num_entries, (arg))
1030 static VALUE r_entry0(VALUE v, st_index_t num, struct load_arg *arg);
1031 static VALUE r_object(struct load_arg *arg);
1032 static ID r_symbol(struct load_arg *arg);
1043 r_prepare(struct load_arg *arg)
1045 st_index_t idx = arg->data->num_entries;
1047 st_insert(arg->data, (st_data_t)idx, (st_data_t)Qundef);
1052 r_byte1_buffered(struct load_arg *arg)
1054 if (arg->buflen == 0) {
1055 long readable = arg->readable < BUFSIZ ? arg->readable : BUFSIZ;
1058 str = rb_funcall2(arg->src, s_read, 1, &n);
1060 check_load_arg(arg, s_read);
1063 arg->infection |= (int)FL_TEST(str, MARSHAL_INFECTION);
1064 memcpy(arg->buf, RSTRING_PTR(str), RSTRING_LEN(str));
1065 arg->offset = 0;
1066 arg->buflen = RSTRING_LEN(str);
1068 arg->buflen--;
1069 return arg->buf[arg->offset++];
1073 r_byte(struct load_arg *arg)
1077 if (RB_TYPE_P(arg->src, T_STRING)) {
1078 if (RSTRING_LEN(arg->src) > arg->offset) {
1079 c = (unsigned char)RSTRING_PTR(arg->src)[arg->offset++];
1086 if (arg->readable >0 || arg->buflen > 0) {
1087 c = r_byte1_buffered(arg);
1090 VALUE v = rb_funcall2(arg->src, s_getbyte, 0, 0);
1091 check_load_arg(arg, s_getbyte);
1115 r_long(struct load_arg *arg)
1118 int c = SIGN_EXTEND_CHAR(r_byte(arg));
1129 x |= (long)r_byte(arg) << (8*i);
1141 x |= (long)r_byte(arg) << (8*i);
1148 r_bytes1(long len, struct load_arg *arg)
1152 str = rb_funcall2(arg->src, s_read, 1, &n);
1153 check_load_arg(arg, s_read);
1157 arg->infection |= (int)FL_TEST(str, MARSHAL_INFECTION);
1163 r_bytes1_buffered(long len, struct load_arg *arg)
1167 if (len <= arg->buflen) {
1168 str = rb_str_new(arg->buf+arg->offset, len);
1169 arg->offset += len;
1170 arg->buflen -= len;
1173 long buflen = arg->buflen;
1174 long readable = arg->readable + 1;
1181 tmp = rb_funcall2(arg->src, s_read, 1, &n);
1183 check_load_arg(arg, s_read);
1190 arg->infection |= (int)FL_TEST(tmp, MARSHAL_INFECTION);
1192 str = rb_str_new(arg->buf+arg->offset, buflen);
1197 memcpy(arg->buf, RSTRING_PTR(tmp)+need_len, buflen);
1198 arg->buflen = buflen;
1201 arg->buflen = 0;
1203 arg->offset = 0;
1209 #define r_bytes(arg) r_bytes0(r_long(arg), (arg))
1212 r_bytes0(long len, struct load_arg *arg)
1217 if (RB_TYPE_P(arg->src, T_STRING)) {
1218 if (RSTRING_LEN(arg->src) - arg->offset >= len) {
1219 str = rb_str_new(RSTRING_PTR(arg->src)+arg->offset, len);
1220 arg->offset += len;
1227 if (arg->readable > 0 || arg->buflen > 0) {
1228 str = r_bytes1_buffered(len, arg);
1231 str = r_bytes1(len, arg);
1253 r_symlink(struct load_arg *arg)
1256 long num = r_long(arg);
1258 if (!st_lookup(arg->symbols, num, &id)) {
1265 r_symreal(struct load_arg *arg, int ivar)
1267 VALUE s = r_bytes(arg);
1270 st_index_t n = arg->symbols->num_entries;
1272 st_insert(arg->symbols, (st_data_t)n, (st_data_t)0);
1274 long num = r_long(arg);
1276 id = r_symbol(arg);
1277 idx = id2encidx(id, r_object(arg));
1282 st_insert(arg->symbols, (st_data_t)n, (st_data_t)id);
1288 r_symbol(struct load_arg *arg)
1293 switch ((type = r_byte(arg))) {
1300 return r_symreal(arg, ivar);
1305 return r_symlink(arg);
1310 r_unique(struct load_arg *arg)
1312 return rb_id2str(r_symbol(arg));
1316 r_string(struct load_arg *arg)
1318 return r_bytes(arg);
1322 r_entry0(VALUE v, st_index_t num, struct load_arg *arg)
1325 if (st_lookup(arg->compat_tbl, v, &real_obj)) {
1326 st_insert(arg->data, num, (st_data_t)real_obj);
1329 st_insert(arg->data, num, (st_data_t)v);
1331 if (arg->infection &&
1333 FL_SET(v, arg->infection);
1335 FL_SET((VALUE)real_obj, arg->infection);
1341 r_leave(VALUE v, struct load_arg *arg)
1344 if (st_lookup(arg->compat_tbl, v, &data)) {
1352 st_delete(arg->compat_tbl, &key, 0);
1355 if (arg->proc) {
1356 v = rb_funcall(arg->proc, s_call, 1, v);
1357 check_load_arg(arg, s_call);
1363 r_ivar(VALUE obj, int *has_encoding, struct load_arg *arg)
1367 len = r_long(arg);
1370 ID id = r_symbol(arg);
1371 VALUE val = r_object(arg);
1407 obj_alloc_by_klass(VALUE klass, struct load_arg *arg, VALUE *oldclass)
1418 st_insert(arg->compat_tbl, (st_data_t)obj, (st_data_t)real_obj);
1426 obj_alloc_by_path(VALUE path, struct load_arg *arg)
1428 return obj_alloc_by_klass(path2class(path), arg, 0);
1450 r_object0(struct load_arg *arg, int *ivp, VALUE extmod)
1453 int type = r_byte(arg);
1459 id = r_long(arg);
1460 if (!st_lookup(arg->data, (st_data_t)id, &link)) {
1464 if (arg->proc) {
1465 v = rb_funcall(arg->proc, s_call, 1, v);
1466 check_load_arg(arg, s_call);
1474 v = r_object0(arg, &ivar, extmod);
1475 if (ivar) r_ivar(v, NULL, arg);
1481 VALUE m = path2module(r_unique(arg));
1486 v = r_object0(arg, 0, extmod);
1496 VALUE c = path2class(r_unique(arg));
1501 v = r_object0(arg, 0, extmod);
1517 v = r_leave(v, arg);
1522 v = r_leave(v, arg);
1527 v = r_leave(v, arg);
1532 long i = r_long(arg);
1535 v = r_leave(v, arg);
1541 VALUE str = r_bytes(arg);
1559 v = r_entry(v, arg);
1560 v = r_leave(v, arg);
1571 RBIGNUM_SET_SIGN(big, (r_byte(arg) == '+'));
1572 len = r_long(arg);
1573 data = r_bytes0(len * 2, arg);
1605 v = r_entry(v, arg);
1606 v = r_leave(v, arg);
1611 v = r_entry(r_string(arg), arg);
1612 v = r_leave(v, arg);
1617 VALUE str = r_bytes(arg);
1618 int options = r_byte(arg);
1620 st_index_t idx = r_prepare(arg);
1623 r_ivar(str, &has_encoding, arg);
1645 v = r_entry0(rb_reg_new_str(str, options), idx, arg);
1646 v = r_leave(v, arg);
1652 volatile long len = r_long(arg); /* gcc 2.7.2.3 -O2 bug?? */
1655 v = r_entry(v, arg);
1656 arg->readable += len - 1;
1658 rb_ary_push(v, r_object(arg));
1659 arg->readable--;
1661 v = r_leave(v, arg);
1662 arg->readable++;
1669 long len = r_long(arg);
1672 v = r_entry(v, arg);
1673 arg->readable += (len - 1) * 2;
1675 VALUE key = r_object(arg);
1676 VALUE value = r_object(arg);
1678 arg->readable -= 2;
1680 arg->readable += 2;
1682 RHASH_IFNONE(v) = r_object(arg);
1684 v = r_leave(v, arg);
1693 st_index_t idx = r_prepare(arg);
1694 VALUE klass = path2class(r_unique(arg));
1695 long len = r_long(arg);
1707 arg->readable += (len - 1) * 2;
1708 v = r_entry0(v, idx, arg);
1711 slot = r_symbol(arg);
1719 rb_ary_push(values, r_object(arg));
1720 arg->readable -= 2;
1723 v = r_leave(v, arg);
1724 arg->readable += 2;
1730 VALUE klass = path2class(r_unique(arg));
1737 data = r_string(arg);
1739 r_ivar(data, NULL, arg);
1743 check_load_arg(arg, s_load);
1744 v = r_entry(v, arg);
1745 v = r_leave(v, arg);
1751 VALUE klass = path2class(r_unique(arg));
1755 v = obj_alloc_by_klass(klass, arg, &oldclass);
1764 v = r_entry(v, arg);
1765 data = r_object(arg);
1767 check_load_arg(arg, s_mload);
1768 v = r_leave(v, arg);
1778 st_index_t idx = r_prepare(arg);
1779 v = obj_alloc_by_path(r_unique(arg), arg);
1783 v = r_entry0(v, idx, arg);
1784 r_ivar(v, NULL, arg);
1785 v = r_leave(v, arg);
1791 VALUE klass = path2class(r_unique(arg));
1795 v = obj_alloc_by_klass(klass, arg, &oldclass);
1799 v = r_entry(v, arg);
1805 r = r_object0(arg, 0, extmod);
1807 check_load_arg(arg, s_load_data);
1808 v = r_leave(v, arg);
1814 VALUE str = r_bytes(arg);
1818 v = r_entry(v, arg);
1819 v = r_leave(v, arg);
1825 VALUE str = r_bytes(arg);
1829 v = r_entry(v, arg);
1830 v = r_leave(v, arg);
1836 VALUE str = r_bytes(arg);
1840 v = r_entry(v, arg);
1841 v = r_leave(v, arg);
1847 v = ID2SYM(r_symreal(arg, *ivp));
1851 v = ID2SYM(r_symreal(arg, 0));
1853 v = r_leave(v, arg);
1857 v = ID2SYM(r_symlink(arg));
1868 r_object(struct load_arg *arg)
1870 return r_object0(arg, 0, Qnil);
1874 clear_load_arg(struct load_arg *arg)
1876 if (arg->buf) {
1877 xfree(arg->buf);
1878 arg->buf = 0;
1880 arg->buflen = 0;
1881 arg->offset = 0;
1882 arg->readable = 0;
1883 if (!arg->symbols) return;
1884 st_free_table(arg->symbols);
1885 arg->symbols = 0;
1886 st_free_table(arg->data);
1887 arg->data = 0;
1888 st_free_table(arg->compat_tbl);
1889 arg->compat_tbl = 0;
1913 struct load_arg *arg;
1928 RB_GC_GUARD(wrapper) = TypedData_Make_Struct(rb_cData, struct load_arg, &load_arg_data, arg);
1929 arg->infection = infection;
1930 arg->src = port;
1931 arg->offset = 0;
1932 arg->symbols = st_init_numtable();
1933 arg->data = st_init_numtable();
1934 arg->compat_tbl = st_init_numtable();
1935 arg->proc = 0;
1936 arg->readable = 0;
1939 arg->buf = xmalloc(BUFSIZ);
1941 arg->buf = 0;
1943 major = r_byte(arg);
1944 minor = r_byte(arg);
1946 clear_load_arg(arg);
1957 if (!NIL_P(proc)) arg->proc = proc;
1958 v = r_object(arg);
1959 clear_load_arg(arg);