From 3ab2f9371e60039936356afaee9f509d782259fd Mon Sep 17 00:00:00 2001 From: furunkel Date: Mon, 19 Oct 2015 22:29:43 +0200 Subject: Clean up GC code --- include/mruby.h | 34 +++------------------------------- 1 file changed, 3 insertions(+), 31 deletions(-) (limited to 'include/mruby.h') diff --git a/include/mruby.h b/include/mruby.h index d50ec3496..452caed07 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -35,6 +35,7 @@ #include "mrbconf.h" #include "mruby/common.h" #include "mruby/value.h" +#include "mruby/gc.h" #include "mruby/version.h" /** @@ -114,16 +115,11 @@ struct mrb_context { struct RFiber *fib; }; -enum gc_state { - GC_STATE_ROOT = 0, - GC_STATE_MARK, - GC_STATE_SWEEP -}; - struct mrb_jmpbuf; typedef void (*mrb_atexit_func)(struct mrb_state*); + typedef struct mrb_state { struct mrb_jmpbuf *jmp; @@ -153,32 +149,8 @@ typedef struct mrb_state { struct RClass *symbol_class; struct RClass *kernel_module; - struct heap_page *heaps; /* heaps for GC */ - struct heap_page *sweeps; - struct heap_page *free_heaps; - size_t live; /* count of live objects */ -#ifdef MRB_GC_FIXED_ARENA - struct RBasic *arena[MRB_GC_ARENA_SIZE]; /* GC protection array */ -#else - struct RBasic **arena; /* GC protection array */ - int arena_capa; -#endif - int arena_idx; - - enum gc_state gc_state; /* state of gc */ - int current_white_part; /* make white object by white_part */ - struct RBasic *gray_list; /* list of gray objects to be traversed incrementally */ - struct RBasic *atomic_gray_list; /* list of objects to be traversed atomically */ - size_t gc_live_after_mark; - size_t gc_threshold; - int gc_interval_ratio; - int gc_step_ratio; - mrb_bool gc_disabled:1; - mrb_bool gc_full:1; - mrb_bool is_generational_gc_mode:1; - mrb_bool out_of_memory:1; - size_t majorgc_old_threshold; struct alloca_header *mems; + mrb_gc gc; mrb_sym symidx; struct kh_n2s *name2sym; /* symbol hash */ -- cgit v1.2.3 From 5c093ed22b1a5200d50b221832d5d04f6d38c21b Mon Sep 17 00:00:00 2001 From: furunkel Date: Mon, 19 Oct 2015 22:34:47 +0200 Subject: Remove segregated value struct declaration --- include/mruby.h | 1 - src/gc.c | 34 ---------------------------------- 2 files changed, 35 deletions(-) (limited to 'include/mruby.h') diff --git a/include/mruby.h b/include/mruby.h index 452caed07..8a26146df 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -119,7 +119,6 @@ struct mrb_jmpbuf; typedef void (*mrb_atexit_func)(struct mrb_state*); - typedef struct mrb_state { struct mrb_jmpbuf *jmp; diff --git a/src/gc.c b/src/gc.c index 3c10a1311..c4257d400 100644 --- a/src/gc.c +++ b/src/gc.c @@ -97,40 +97,6 @@ struct free_obj { struct RBasic *next; }; -typedef struct { - union { - struct free_obj free; - struct RBasic basic; - struct RClass klass; - struct RProc proc; - struct RException exc; - } as; -} infreq_value; - -typedef struct { - union { - struct free_obj free; - struct RBasic basic; - struct RObject object; -#ifdef MRB_WORD_BOXING - struct RFloat floatv; - struct RCptr cptr; -#endif - } as; -} small_value; - -typedef struct { - union { - struct free_obj free; - struct RBasic basic; - struct RString string; - struct RArray array; - struct RHash hash; - struct RRange range; - struct RData data; - } as; -} large_value; - typedef struct { union { struct free_obj free; -- cgit v1.2.3 From 2f8b0f66bcce744a5cf6320237087d29313c9855 Mon Sep 17 00:00:00 2001 From: furunkel Date: Mon, 19 Oct 2015 22:43:09 +0200 Subject: Move MRB_GC_ARENA_SIZE to gc.h and fix compiler warnings --- include/mruby.h | 4 ---- include/mruby/gc.h | 6 +++++- src/gc.c | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) (limited to 'include/mruby.h') diff --git a/include/mruby.h b/include/mruby.h index 8a26146df..b0161aff7 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -65,10 +65,6 @@ struct mrb_state; */ typedef void* (*mrb_allocf) (struct mrb_state *mrb, void*, size_t, void *ud); -#ifndef MRB_GC_ARENA_SIZE -#define MRB_GC_ARENA_SIZE 100 -#endif - #ifndef MRB_FIXED_STATE_ATEXIT_STACK_SIZE #define MRB_FIXED_STATE_ATEXIT_STACK_SIZE 5 #endif diff --git a/include/mruby/gc.h b/include/mruby/gc.h index 2bd8b8539..d7687c05e 100644 --- a/include/mruby/gc.h +++ b/include/mruby/gc.h @@ -30,6 +30,10 @@ MRB_API void mrb_free_context(struct mrb_state *mrb, struct mrb_context *c); #define MRB_GC_WHITES (MRB_GC_WHITE_A | MRB_GC_WHITE_B) #define MRB_GC_COLOR_MASK 7 +#ifndef MRB_GC_ARENA_SIZE +#define MRB_GC_ARENA_SIZE 100 +#endif + typedef enum { GC_STATE_ROOT = 0, GC_STATE_MARK, @@ -75,7 +79,7 @@ typedef struct mrb_gc { } mrb_gc; MRB_API mrb_bool -mrb_object_dead_p(struct mrb_state *mrb, struct RObject *object); +mrb_object_dead_p(struct mrb_state *mrb, struct RBasic *object); MRB_END_DECL diff --git a/src/gc.c b/src/gc.c index c4257d400..360002c5d 100644 --- a/src/gc.c +++ b/src/gc.c @@ -260,7 +260,7 @@ mrb_free(mrb_state *mrb, void *p) } MRB_API mrb_bool -mrb_object_dead_p(mrb_state *mrb, struct RObject *object) { +mrb_object_dead_p(mrb_state *mrb, struct RBasic *object) { return is_dead(&mrb->gc, object); } @@ -394,7 +394,7 @@ gc_protect(mrb_state *mrb, mrb_gc *gc, struct RBasic *p) if (gc->arena_idx >= MRB_GC_ARENA_SIZE) { /* arena overflow error */ gc->arena_idx = MRB_GC_ARENA_SIZE - 4; /* force room in arena */ - mrb_raise(gc, E_RUNTIME_ERROR, "arena overflow error"); + mrb_raise(mrb, E_RUNTIME_ERROR, "arena overflow error"); } #else if (gc->arena_idx >= gc->arena_capa) { -- cgit v1.2.3