From ae9d9a07811c0becbf4f435dcaa2a57ff8cdb050 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Thu, 31 May 2012 22:49:38 +0900 Subject: correctly share string bodies --- include/mruby.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'include/mruby.h') diff --git a/include/mruby.h b/include/mruby.h index c86c3b478..724f01d3e 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -341,8 +341,9 @@ void *mrb_realloc(mrb_state*, void*, size_t); struct RBasic *mrb_obj_alloc(mrb_state*, enum mrb_vtype, struct RClass*); void *mrb_free(mrb_state*, void*); -mrb_value mrb_str_new(mrb_state *mrb, const char *p, size_t len); /* mrb_str_new */ +mrb_value mrb_str_new(mrb_state *mrb, const char *p, int len); /* mrb_str_new */ mrb_value mrb_str_new_cstr(mrb_state*, const char*); +mrb_value mrb_str_new2(mrb_state *mrb, const char *p); mrb_state* mrb_open(void); mrb_state* mrb_open_allocf(mrb_allocf); -- cgit v1.2.3 From e36285769ad75d30bc835e795eb77608f23f66c4 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Fri, 1 Jun 2012 02:40:52 +0900 Subject: new API mrb_gc_protect() to add object to arena --- include/mruby.h | 2 +- src/gc.c | 25 +++++++++++++++++++------ 2 files changed, 20 insertions(+), 7 deletions(-) (limited to 'include/mruby.h') diff --git a/include/mruby.h b/include/mruby.h index 724f01d3e..2109a7615 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -506,7 +506,7 @@ mrb_value mrb_exec_recursive(mrb_state *mrb, mrb_value(*)(mrb_state *, mrb_value #define xfree free #endif -void mrb_gc(void); +void mrb_gc_protect(mrb_state *mrb, mrb_value obj); #define thread_debug if(0)printf #define RUBY_VM 1 /* YARV */ diff --git a/src/gc.c b/src/gc.c index 6ebde5cb0..04be437c1 100644 --- a/src/gc.c +++ b/src/gc.c @@ -242,6 +242,24 @@ mrb_init_heap(mrb_state *mrb) #endif } +static void +gc_protect(mrb_state *mrb, struct RBasic *p) +{ + if (mrb->arena_idx > MRB_ARENA_SIZE) { + /* arena overflow error */ + mrb->arena_idx = MRB_ARENA_SIZE - 4; /* force room in arena */ + mrb_raise(mrb, mrb->eRuntimeError_class, "arena overflow error"); + } + mrb->arena[mrb->arena_idx++] = p; +} + +void +mrb_gc_protect(mrb_state *mrb, mrb_value obj) +{ + if (SPECIAL_CONST_P(obj)) return; + gc_protect(mrb, RBASIC(obj)); +} + struct RBasic* mrb_obj_alloc(mrb_state *mrb, enum mrb_vtype ttype, struct RClass *cls) { @@ -264,12 +282,7 @@ mrb_obj_alloc(mrb_state *mrb, enum mrb_vtype ttype, struct RClass *cls) } mrb->live++; - if (mrb->arena_idx > MRB_ARENA_SIZE) { - /* arena overflow error */ - mrb->arena_idx = MRB_ARENA_SIZE - 4; /* force room in arena */ - mrb_raise(mrb, mrb->eRuntimeError_class, "arena overflow error"); - } - mrb->arena[mrb->arena_idx++] = p; + gc_protect(mrb, p); memset(p, 0, sizeof(RVALUE)); p->tt = ttype; p->c = cls; -- cgit v1.2.3 From 29f4bf010923e332d09985afd314b9536a3a26e2 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Fri, 1 Jun 2012 02:43:06 +0900 Subject: remove unused event related declarations --- include/mruby.h | 34 ---------------------------------- 1 file changed, 34 deletions(-) (limited to 'include/mruby.h') diff --git a/include/mruby.h b/include/mruby.h index 2109a7615..a8ea1a490 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -507,40 +507,6 @@ mrb_value mrb_exec_recursive(mrb_state *mrb, mrb_value(*)(mrb_state *, mrb_value #endif void mrb_gc_protect(mrb_state *mrb, mrb_value obj); -#define thread_debug if(0)printf - -#define RUBY_VM 1 /* YARV */ -#define HAVE_NATIVETHREAD -int ruby_native_thread_p(void); - -#define RUBY_EVENT_NONE 0x0000 -#define RUBY_EVENT_LINE 0x0001 -#define RUBY_EVENT_CLASS 0x0002 -#define RUBY_EVENT_END 0x0004 -#define RUBY_EVENT_CALL 0x0008 -#define RUBY_EVENT_RETURN 0x0010 -#define RUBY_EVENT_C_CALL 0x0020 -#define RUBY_EVENT_C_RETURN 0x0040 -#define RUBY_EVENT_RAISE 0x0080 -#define RUBY_EVENT_ALL 0xffff -#define RUBY_EVENT_VM 0x10000 -#define RUBY_EVENT_SWITCH 0x20000 -#define RUBY_EVENT_COVERAGE 0x40000 - -typedef unsigned int mrb_event_flag_t; -typedef void (*mrb_event_hook_func_t)(mrb_state *mrb, mrb_event_flag_t, mrb_value data, mrb_value, mrb_sym, mrb_value klass); - -typedef struct mrb_event_hook_struct { - mrb_event_flag_t flag; - mrb_event_hook_func_t func; - mrb_value data; - struct mrb_event_hook_struct *next; -} mrb_event_hook_t; - -#define RB_EVENT_HOOKS_HAVE_CALLBACK_DATA 1 -void mrb_add_event_hook(mrb_state *mrb, mrb_event_hook_func_t func, mrb_event_flag_t events, - mrb_value data); -int mrb_remove_event_hook(mrb_event_hook_func_t func); mrb_value mrb_to_int(mrb_state *mrb, mrb_value val); void mrb_check_type(mrb_state *mrb, mrb_value x, enum mrb_vtype t); -- cgit v1.2.3 From 1add4558a66ba56a06d2bc7840d6fc0fb1772cbe Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Fri, 1 Jun 2012 02:43:29 +0900 Subject: add prototype for mrb_garbage_collect() --- include/mruby.h | 1 + 1 file changed, 1 insertion(+) (limited to 'include/mruby.h') diff --git a/include/mruby.h b/include/mruby.h index a8ea1a490..2063d95c4 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -506,6 +506,7 @@ mrb_value mrb_exec_recursive(mrb_state *mrb, mrb_value(*)(mrb_state *, mrb_value #define xfree free #endif +void mrb_garbage_collect(mrb_state *mrb) void mrb_gc_protect(mrb_state *mrb, mrb_value obj); mrb_value mrb_to_int(mrb_state *mrb, mrb_value val); void mrb_check_type(mrb_state *mrb, mrb_value x, enum mrb_vtype t); -- cgit v1.2.3 From 69ed2d2c3c4d1ceda1af956172af14e94bd4cef9 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Fri, 1 Jun 2012 02:43:39 +0900 Subject: add prototype for mrb_garbage_collect() --- include/mruby.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'include/mruby.h') diff --git a/include/mruby.h b/include/mruby.h index 2063d95c4..c2291cce1 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -506,7 +506,7 @@ mrb_value mrb_exec_recursive(mrb_state *mrb, mrb_value(*)(mrb_state *, mrb_value #define xfree free #endif -void mrb_garbage_collect(mrb_state *mrb) +void mrb_garbage_collect(mrb_state *mrb); void mrb_gc_protect(mrb_state *mrb, mrb_value obj); mrb_value mrb_to_int(mrb_state *mrb, mrb_value val); void mrb_check_type(mrb_state *mrb, mrb_value x, enum mrb_vtype t); -- cgit v1.2.3 From 1f704552ccb3243e259d4b507e3173db8876e484 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Fri, 1 Jun 2012 02:48:19 +0900 Subject: move respond_to and instance_of prototypes to mruby.h --- include/mruby.h | 3 +++ include/mruby/class.h | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'include/mruby.h') diff --git a/include/mruby.h b/include/mruby.h index c2291cce1..3acee3753 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -557,6 +557,9 @@ int mrb_sourceline(void); void ruby_default_signal(int sig); mrb_value mrb_attr_get(mrb_state *mrb, mrb_value obj, mrb_sym id); +int mrb_respond_to(mrb_state *mrb, mrb_value obj, mrb_sym mid); +int mrb_obj_is_instance_of(mrb_state *mrb, mrb_value obj, struct RClass* c); + /* memory pool implementation */ typedef struct mrb_pool mrb_pool; struct mrb_pool* mrb_pool_open(mrb_state*); diff --git a/include/mruby/class.h b/include/mruby/class.h index 1d316c980..0afd331b0 100644 --- a/include/mruby/class.h +++ b/include/mruby/class.h @@ -74,8 +74,6 @@ struct RClass *mrb_class_outer_module(mrb_state*, struct RClass *); struct RProc *mrb_method_search_vm(mrb_state*, struct RClass**, mrb_sym); struct RProc *mrb_method_search(mrb_state*, struct RClass*, mrb_sym); -int mrb_respond_to(mrb_state *mrb, mrb_value obj, mrb_sym mid); -int mrb_obj_is_instance_of(mrb_state *mrb, mrb_value obj, struct RClass* c); struct RClass* mrb_class_real(struct RClass* cl); void mrb_obj_call_init(mrb_state *mrb, mrb_value obj, int argc, mrb_value *argv); -- cgit v1.2.3 From f3fce2ff0373f444ff1f422e74a5f8669d1c089b Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Fri, 1 Jun 2012 02:49:04 +0900 Subject: remove REALLOC_N --- include/mruby.h | 2 -- 1 file changed, 2 deletions(-) (limited to 'include/mruby.h') diff --git a/include/mruby.h b/include/mruby.h index 3acee3753..280c347b4 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -539,8 +539,6 @@ typedef enum call_type { void mrb_cmperr(mrb_state *mrb, mrb_value x, mrb_value y); int mrb_cmpint(mrb_state *mrb, mrb_value val, mrb_value a, mrb_value b); -#define REALLOC_N(mrb,var,type,n) (var)=(type*)mrb_realloc(mrb, (char*)(var), sizeof(type)*(n)) - #ifndef ANYARGS # ifdef __cplusplus # define ANYARGS ... -- cgit v1.2.3 From 034ef8696f66b05acbbb39a481e8f650876efe82 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Fri, 1 Jun 2012 02:50:07 +0900 Subject: remove KASH from mruby.h --- include/mruby.h | 5 ----- 1 file changed, 5 deletions(-) (limited to 'include/mruby.h') diff --git a/include/mruby.h b/include/mruby.h index 280c347b4..647c421cd 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -523,11 +523,6 @@ void mrb_check_type(mrb_state *mrb, mrb_value x, enum mrb_vtype t); #define ruby_setjmp(env) RUBY_SETJMP(env) #define ruby_longjmp(env,val) RUBY_LONGJMP(env,val) -#define KHASH 0 -#define STHASH 1 -#define BASICHASH 2 -#define HASH_CLASS_METHOD BASICHASH - typedef enum call_type { CALL_PUBLIC, CALL_FCALL, -- cgit v1.2.3 From 2efc7dba42b745d289694a05fb50a2562bad9af8 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Fri, 1 Jun 2012 02:50:59 +0900 Subject: remove ruby_setjmp from mruby.h --- include/mruby.h | 12 ------------ 1 file changed, 12 deletions(-) (limited to 'include/mruby.h') diff --git a/include/mruby.h b/include/mruby.h index 647c421cd..83c0bac5b 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -511,18 +511,6 @@ void mrb_gc_protect(mrb_state *mrb, mrb_value obj); mrb_value mrb_to_int(mrb_state *mrb, mrb_value val); void mrb_check_type(mrb_state *mrb, mrb_value x, enum mrb_vtype t); -//#define RUBY_SETJMP(env) ${setjmp_prefix}setjmp(env${setjmp_sigmask+,0}) -//#define RUBY_LONGJMP(env,val) ${setjmp_prefix}longjmp(env,val) -//#define RUBY_JMP_BUF ${setjmp_sigmask+${setjmp_prefix}}jmp_buf -#define RUBY_SETJMP(env) __builtin_setjmp(env) -#define RUBY_LONGJMP(env,val) __builtin_longjmp(env,1)//(env,val) -//#define RUBY_JMP_BUF ${setjmp_sigmask+${setjmp_prefix}}jmp_buf -#define select(n, r, w, e, t) select_large_fdset(n, r, w, e, t) - -//int RUBY_SETJMP(mrb_jmpbuf_t env); /* add kusuda */ -#define ruby_setjmp(env) RUBY_SETJMP(env) -#define ruby_longjmp(env,val) RUBY_LONGJMP(env,val) - typedef enum call_type { CALL_PUBLIC, CALL_FCALL, -- cgit v1.2.3 From 9e826933b5ba2e29f81a6f47a710d1541b738a83 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Fri, 1 Jun 2012 02:51:48 +0900 Subject: remove IO related prototypes from mruby.h --- include/mruby.h | 18 ------------------ 1 file changed, 18 deletions(-) (limited to 'include/mruby.h') diff --git a/include/mruby.h b/include/mruby.h index 83c0bac5b..e7756fb29 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -472,24 +472,6 @@ NUM2CHR(mrb_value x) */ #define NUM2CHR(x) NUM2CHR_internal(x) #endif -mrb_value mrb_io_gets(mrb_state *mrb, mrb_value); -mrb_value mrb_io_getbyte(mrb_state *mrb, mrb_value); -mrb_value mrb_io_ungetc(mrb_state *, mrb_value, mrb_value); -mrb_value mrb_io_ungetbyte(mrb_state *mrb, mrb_value, mrb_value); -mrb_value mrb_io_close(mrb_state *mrb, mrb_value); -mrb_value mrb_io_flush(mrb_state *mrb, mrb_value); -mrb_value mrb_io_eof(mrb_value); -mrb_value mrb_io_binmode(mrb_state *mrb, mrb_value); -mrb_value mrb_io_ascii8bit_binmode(mrb_value); -mrb_value mrb_io_addstr(mrb_state *mrb, mrb_value, mrb_value); -mrb_value mrb_io_printf(mrb_state *mrb, int, mrb_value*, mrb_value); -mrb_value mrb_io_print(mrb_state *mrb, int, mrb_value*, mrb_value); -mrb_value mrb_io_puts(mrb_state *mrb, /*int argc, mrb_value *argv,*/ mrb_value); -mrb_value mrb_io_fdopen(int, int, const char*); -mrb_value mrb_io_get_io(mrb_state *mrb, mrb_value); -mrb_value mrb_file_open(mrb_state *mrb, const char*, const char*); -mrb_value mrb_file_open_str(mrb_value, const char*); -mrb_value mrb_gets(mrb_state *mrb); mrb_value mrb_yield(mrb_state *mrb, mrb_value v, mrb_value blk); mrb_value mrb_yield_argv(mrb_state *mrb, mrb_value b, int argc, mrb_value *argv); -- cgit v1.2.3 From 617ea34d976b646b9526183acbc3325521b7f9a8 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Fri, 1 Jun 2012 02:53:15 +0900 Subject: remove CONST_ID from mruby.h --- include/mruby.h | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'include/mruby.h') diff --git a/include/mruby.h b/include/mruby.h index e7756fb29..de23d877b 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -448,16 +448,6 @@ void mrb_bug(const char *fmt, ...); #define SYM2ID(x) ((x).value.sym) -#define CONST_ID_CACHE(mrb, result, str) \ - { \ - static mrb_sym mrb_intern_id_cache;\ - if (!mrb_intern_id_cache) \ - mrb_intern_id_cache = mrb_intern(mrb, str); \ - result mrb_intern_id_cache; \ - } -#define CONST_ID(mrb, var, str) \ - do CONST_ID_CACHE(mrb, var =, str) while (0) - #define NUM2CHR_internal(x) (((mrb_type(x) == MRB_TT_STRING)&&(RSTRING_LEN(x)>=1))?\ RSTRING_PTR(x)[0]:(char)(mrb_fixnum_number(x)&0xff)) #ifdef __GNUC__ -- cgit v1.2.3 From aafd787e58783043f1a35eda8a22604a1274c9bd Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Fri, 1 Jun 2012 02:53:50 +0900 Subject: remove mrb_rs from mruby.h --- include/mruby.h | 3 --- 1 file changed, 3 deletions(-) (limited to 'include/mruby.h') diff --git a/include/mruby.h b/include/mruby.h index de23d877b..70d7717fa 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -416,9 +416,6 @@ mrb_value mrb_check_funcall(mrb_state *mrb, mrb_value recv, mrb_sym mid, int arg #define ISXDIGIT(c) (ISASCII(c) && isxdigit((int)(unsigned char)(c))) #endif -extern mrb_value mrb_rs; -extern mrb_value mrb_default_rs; - int mrb_block_given_p(void); void mrb_raise(mrb_state *mrb, struct RClass *c, const char *fmt, ...); void rb_raise(struct RClass *c, const char *fmt, ...); -- cgit v1.2.3 From bf20cc800e5e9177283ce7fe3b5a83119eda113f Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Fri, 1 Jun 2012 06:47:09 +0900 Subject: remove unused prototypes from mruby.h --- include/mruby.h | 2 -- 1 file changed, 2 deletions(-) (limited to 'include/mruby.h') diff --git a/include/mruby.h b/include/mruby.h index 70d7717fa..3bbc6e6cc 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -503,8 +503,6 @@ const char *mrb_class_name(mrb_state *mrb, struct RClass* klass); void mrb_define_global_const(mrb_state *mrb, const char *name, mrb_value val); mrb_value mrb_block_proc(void); -int mrb_sourceline(void); -void ruby_default_signal(int sig); mrb_value mrb_attr_get(mrb_state *mrb, mrb_value obj, mrb_sym id); int mrb_respond_to(mrb_state *mrb, mrb_value obj, mrb_sym mid); -- cgit v1.2.3