44 vfprintf(dc->
stream, format, vl);
61 switch ((c = value[i])) {
97 dump_append(dc,
"{\"type\":\"SYMBOL\", \"value\":");
102 static inline const char *
106 #define CASE_TYPE(type) case T_##type: return #type; break 141 if (value ==
Qtrue) {
144 else if (value ==
Qfalse) {
147 else if (value ==
Qnil) {
173 dump_append(dc,
", \"references\":[\"%p\"", (
void *)ref);
280 fptr =
RFILE(obj)->fptr;
308 for (i=0; i<n; i++) {
319 heap_i(
void *vstart,
void *vend,
size_t stride,
void *data)
322 for (; v != (
VALUE)vend; v += stride) {
337 dump_append(dc,
"{\"type\":\"ROOT\", \"root\":\"%s\", \"references\":[\"%p\"", category, (
void *)obj);
413 static const char filename[] =
"rubyobj";
445 static const char filename[] =
"rubyheap";
static void root_obj_i(const char *category, VALUE obj, void *data)
#define is_broken_string(str)
static VALUE objspace_dump(int argc, VALUE *argv, VALUE os)
#define RB_OBJ_GC_FLAGS_MAX
static void dump_object(VALUE obj, struct dump_config *dc)
static void dump_append(struct dump_config *dc, const char *format,...)
#define is_ascii_string(str)
void rb_objspace_reachable_objects_from_root(void(func)(const char *category, VALUE, void *), void *passing_data)
void rb_raise(VALUE exc, const char *fmt,...)
const char * root_category
void rb_objspace_each_objects(each_obj_callback *callback, void *data)
VALUE rb_path2class(const char *)
PRINTF_ARGS(static void dump_append(struct dump_config *, const char *,...), 2, 3)
#define GetOpenFile(obj, fp)
static unsigned char * output
size_t rb_obj_memsize_of(VALUE obj)
VALUE rb_require(const char *)
static void reachable_object_i(VALUE ref, void *data)
VALUE rb_io_get_write_io(VALUE io)
static void dump_append_string_value(struct dump_config *dc, VALUE obj)
VALUE rb_io_check_io(VALUE io)
static void dump_append_special_const(struct dump_config *dc, VALUE value)
#define HASH_PROC_DEFAULT
VALUE rb_str_resurrect(VALUE str)
static VALUE dump_output(struct dump_config *dc, VALUE opts, VALUE output, const char *filename)
static VALUE objspace_dump_all(int argc, VALUE *argv, VALUE os)
void rb_define_module_function(VALUE module, const char *name, VALUE(*func)(ANYARGS), int argc)
Defines a module function for module.
size_t rb_obj_gc_flags(VALUE obj, ID *flags, size_t max)
VALUE rb_str_vcatf(VALUE, const char *, va_list)
int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)
VALUE rb_assoc_new(VALUE car, VALUE cdr)
#define STRING(string, length)
const char * rb_class2name(VALUE)
static int heap_i(void *vstart, void *vend, size_t stride, void *data)
const char * rb_id2name(ID)
void Init_objspace_dump(VALUE rb_mObjSpace)
VALUE rb_str_new_cstr(const char *)
static VALUE dump_result(struct dump_config *dc, VALUE output)
#define ENCODING_IS_ASCII8BIT(obj)
static const char * obj_type(VALUE obj)
struct allocation_info * objspace_lookup_allocation_info(VALUE obj)
#define ENCODING_GET(obj)
static void dump_append_string_content(struct dump_config *dc, VALUE obj)
void rb_objspace_reachable_objects_from(VALUE obj, void(func)(VALUE, void *), void *data)
#define RBASIC_CLASS(obj)
VALUE rb_hash_aref(VALUE hash, VALUE key)
const char * ruby_node_name(int node)
size_t rb_str_capacity(VALUE str)
FILE * rb_io_stdio_file(rb_io_t *fptr)
#define SPECIAL_CONST_P(x)
VALUE rb_define_module(const char *name)
size_t cur_obj_references
static void dump_append_symbol_value(struct dump_config *dc, VALUE obj)
#define RTYPEDDATA_TYPE(v)
VALUE rb_obj_frozen_p(VALUE obj)
rb_encoding * rb_enc_from_index(int index)