From f4cf8ea423d8f9df1d341adba63d1416779aae8a Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Wed, 9 May 2012 08:49:38 +0900 Subject: partial VC support --- include/mrbconf.h | 5 +++++ include/mruby/khash.h | 28 +++++++++++++++------------- include/mruby/numeric.h | 2 +- include/mruby/string.h | 4 ++-- src/class.c | 4 ++-- src/hash.c | 1 + src/kernel.c | 7 ++++--- src/numeric.c | 4 ++-- src/re.c | 29 +++++++++++++++++++---------- src/sprintf.c | 3 ++- src/string.c | 3 ++- src/variable.c | 2 +- src/vm.c | 4 ++-- 13 files changed, 58 insertions(+), 38 deletions(-) diff --git a/include/mrbconf.h b/include/mrbconf.h index b21388f7a..4786d8194 100644 --- a/include/mrbconf.h +++ b/include/mrbconf.h @@ -42,4 +42,9 @@ typedef intptr_t mrb_sym; # define TRUE 1 #endif +#ifdef _MSC_VER +# define inline __inline +# define snprintf _snprintf +#endif + #endif /* MRUBYCONF_H */ diff --git a/include/mruby/khash.h b/include/mruby/khash.h index 378e1fc2d..5eef2af59 100644 --- a/include/mruby/khash.h +++ b/include/mruby/khash.h @@ -17,7 +17,7 @@ typedef khint_t khiter_t; //extern uint8_t __m[]; /* mask for flags */ -static uint8_t __m[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; +static const uint8_t __m[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; #define __ac_isempty(e_flag, d_flag, i) (e_flag[(i)/8]&__m[(i)%8]) @@ -107,18 +107,20 @@ static uint8_t __m[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; new_n_buckets = INITIAL_HASH_SIZE; \ while( new_n_buckets < limit ) new_n_buckets *= 2; \ } \ - uint8_t *old_e_flags = h->e_flags; \ - khkey_t *old_keys = h->keys; \ - khval_t *old_vals = h->vals; \ - khint_t old_n_buckets = h->n_buckets; \ - h->n_buckets = new_n_buckets; \ - kh_alloc_##name(h); \ - /* relocate */ \ - khint_t i; \ - for( i=0 ; ie_flags; \ + khkey_t *old_keys = h->keys; \ + khval_t *old_vals = h->vals; \ + khint_t old_n_buckets = h->n_buckets; \ + h->n_buckets = new_n_buckets; \ + kh_alloc_##name(h); \ + /* relocate */ \ + khint_t i; \ + for( i=0 ; i= FIXNUM_MIN) #define FIXABLE(f) (POSFIXABLE(f) && NEGFIXABLE(f)) -mrb_value mrb_flt2big(mrb_state *mrb, float d); +mrb_value mrb_flt2big(mrb_state *mrb, mrb_float d); void mrb_num_zerodiv(mrb_state *mrb); mrb_value mrb_fix2str(mrb_state *mrb, mrb_value x, int base); diff --git a/include/mruby/string.h b/include/mruby/string.h index 6fe2cc9fd..8e259dfe3 100644 --- a/include/mruby/string.h +++ b/include/mruby/string.h @@ -26,9 +26,9 @@ extern const char ruby_digitmap[]; struct RString { MRUBY_OBJECT_HEADER; - long len; + int len; union { - size_t capa; + int capa; struct RString *shared; } aux; char *buf; diff --git a/src/class.c b/src/class.c index f366d4d1f..1109c1e2b 100644 --- a/src/class.c +++ b/src/class.c @@ -315,7 +315,7 @@ mrb_define_method_id(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_func_t f void mrb_define_method(mrb_state *mrb, struct RClass *c, const char *name, mrb_func_t func, int aspec) { - return mrb_define_method_id(mrb, c, mrb_intern(mrb, name), func, aspec); + mrb_define_method_id(mrb, c, mrb_intern(mrb, name), func, aspec); } void @@ -576,7 +576,7 @@ mrb_singleton_class(mrb_state *mrb, mrb_value v) void mrb_define_class_method(mrb_state *mrb, struct RClass *c, const char *name, mrb_func_t func, int aspec) { - return mrb_define_method_id(mrb, c->c, mrb_intern(mrb, name), func, aspec); + mrb_define_method_id(mrb, c->c, mrb_intern(mrb, name), func, aspec); } struct RProc* diff --git a/src/hash.c b/src/hash.c index cb34dae75..018210b78 100644 --- a/src/hash.c +++ b/src/hash.c @@ -37,6 +37,7 @@ mrb_hash_ht_hash_equal(mrb_state *mrb, mrb_value a, mrb_value b) { return mrb_equal(mrb, a, b); } + KHASH_INIT(ht, mrb_value, mrb_value, 1, mrb_hash_ht_hash_func, mrb_hash_ht_hash_equal); mrb_value mrb_exec_recursive_paired(mrb_state *mrb, mrb_value (*func) (mrb_state *, mrb_value, mrb_value, int), diff --git a/src/kernel.c b/src/kernel.c index b36ed56b8..8ae04de32 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -729,9 +729,10 @@ mrb_value mrb_obj_ivar_get(mrb_state *mrb, mrb_value self) { mrb_value arg; + mrb_sym id; mrb_get_args(mrb, "o", &arg); - mrb_sym id = mrb_to_id(mrb, arg); + id = mrb_to_id(mrb, arg); //if (!mrb_is_instance_id(id)) { // mrb_name_error(mrb, id, "`%s' is not allowed as an instance variable name", mrb_sym2name(mrb, id)); @@ -797,7 +798,7 @@ mrb_obj_instance_variables(mrb_state *mrb, mrb_value self) { mrb_value ary; kh_iv_t *h = RCLASS_IV_TBL(self); - int i; + khint_t i; const char* p; ary = mrb_ary_new(mrb); @@ -924,7 +925,7 @@ mrb_f_loop(mrb_state *mrb, mrb_value self) static void method_entry_loop(mrb_state *mrb, struct RClass* klass, mrb_value ary) { - int i; + khint_t i; khash_t(mt) *h = klass->mt; if (!h) return; diff --git a/src/numeric.c b/src/numeric.c index 054e09603..132da1553 100644 --- a/src/numeric.c +++ b/src/numeric.c @@ -1084,7 +1084,7 @@ fix_to_f(mrb_state *mrb, mrb_value num) */ /* ------------------------------------------------------------------------*/ static mrb_int -flt2big(mrb_state *mrb, float d) +flt2big(mrb_state *mrb, mrb_float d) { mrb_int z; @@ -1099,7 +1099,7 @@ flt2big(mrb_state *mrb, float d) } mrb_value -mrb_flt2big(mrb_state *mrb, float d) +mrb_flt2big(mrb_state *mrb, mrb_float d) { return mrb_fixnum_value(flt2big(mrb, d)); } diff --git a/src/re.c b/src/re.c index d2a57196f..9e5b8d9a8 100644 --- a/src/re.c +++ b/src/re.c @@ -85,9 +85,9 @@ mrb_reg_s_new_instance(mrb_state *mrb, /*int argc, mrb_value *argv, */mrb_value //mrb_obj_call_init(obj, argc, argv);...mrb_funcall2(obj, idInitialize, argc, argv); mrb_value argv[16]; int argc; + struct RRegexp *re; mrb_get_args(mrb, "*", &argv, &argc); - struct RRegexp *re; re = mrb_obj_alloc(mrb, MRB_TT_REGEX, mrb->regex_class); re->ptr = 0; re->src = 0; @@ -1861,12 +1861,16 @@ mrb_match_begin(mrb_state *mrb, mrb_value match/*, mrb_value n*/) { mrb_value argv[16]; int argc; - mrb_get_args(mrb, "*", &argv, &argc); mrb_value n = argv[0]; - int i = match_backref_number(mrb, match, n); - struct re_registers *regs = RMATCH_REGS(match); + int i; + struct re_registers *regs; match_check(mrb, match); + mrb_get_args(mrb, "*", &argv, &argc); + n = argv[0]; + i = match_backref_number(mrb, match, n); + regs = RMATCH_REGS(match); + if (i < 0 || regs->num_regs <= i) mrb_raise(mrb, E_INDEX_ERROR, "index %d out of matches", i); @@ -1944,12 +1948,16 @@ mrb_match_end(mrb_state *mrb, mrb_value match/*, mrb_value n*/) { mrb_value argv[16]; int argc; - mrb_get_args(mrb, "*", &argv, &argc); - mrb_value n = argv[0]; - int i = match_backref_number(mrb, match, n); - struct re_registers *regs = RMATCH_REGS(match); + mrb_value n; + int i; + struct re_registers *regs; match_check(mrb, match); + mrb_get_args(mrb, "*", &argv, &argc); + n = argv[0]; + i = match_backref_number(mrb, match, n); + regs = RMATCH_REGS(match); + if (i < 0 || regs->num_regs <= i) mrb_raise(mrb, E_INDEX_ERROR, "index %d out of matches", i); @@ -2050,11 +2058,12 @@ mrb_match_offset(mrb_state *mrb, mrb_value match/*, mrb_value n*/) { mrb_value n; struct re_registers *regs = RMATCH_REGS(match); + int i; + match_check(mrb, match); mrb_get_args(mrb, "o", &n); - int i = match_backref_number(mrb, match, n); + i = match_backref_number(mrb, match, n); - match_check(mrb, match); if (i < 0 || regs->num_regs <= i) mrb_raise(mrb, E_INDEX_ERROR, "index %d out of matches", i); diff --git a/src/sprintf.c b/src/sprintf.c index fdf484ba0..975f26f56 100644 --- a/src/sprintf.c +++ b/src/sprintf.c @@ -600,6 +600,7 @@ retry: { const char *start = p; char term = (*p == '<') ? '>' : '}'; + mrb_value symname; for (; p < end && *p != term; ) p++; @@ -607,7 +608,7 @@ retry: mrb_raise(mrb, E_ARGUMENT_ERROR, "name%.*s after <%s>", (int)(p - start + 1), start, mrb_sym2name(mrb, id)); } - mrb_value symname = mrb_str_new(mrb, start + 1, p - start - 1); + symname = mrb_str_new(mrb, start + 1, p - start - 1); id = mrb_intern(mrb, RSTRING_PTR(symname)); nextvalue = GETNAMEARG(mrb_symbol_value(id), start, (int)(p - start + 1)); if (UNDEF_P(nextvalue)) { diff --git a/src/string.c b/src/string.c index 183763bf2..dc7fdfae8 100644 --- a/src/string.c +++ b/src/string.c @@ -3843,6 +3843,7 @@ mrb_cstr_to_inum(mrb_state *mrb, const char *str, int base, int badcheck) // long i; // mrb_value z; // BDIGIT *zds; + unsigned long val; #undef ISDIGIT #define ISDIGIT(c) ('0' <= (c) && (c) <= '9') @@ -3958,7 +3959,7 @@ mrb_cstr_to_inum(mrb_state *mrb, const char *str, int base, int badcheck) } len *= strlen(str)*sizeof(char); - unsigned long val = strtoul((char*)str, &end, base); + val = strtoul((char*)str, &end, base); if (badcheck) { if (end == str) goto bad; /* no number */ diff --git a/src/variable.c b/src/variable.c index 2e12bd156..e769eaba0 100644 --- a/src/variable.c +++ b/src/variable.c @@ -350,7 +350,7 @@ mrb_value mrb_f_global_variables(mrb_state *mrb, mrb_value self) { char buf[3]; - int i; + khint_t i; struct kh_iv *h = mrb->globals; mrb_value ary = mrb_ary_new(mrb); diff --git a/src/vm.c b/src/vm.c index 9c79a7afe..c6aa92135 100644 --- a/src/vm.c +++ b/src/vm.c @@ -44,7 +44,7 @@ stack_init(mrb_state *mrb) static void stack_extend(mrb_state *mrb, int room, int keep) { - size_t size, off; + int size, off; if (mrb->stack + room > mrb->stend) { size = mrb->stend - mrb->stbase; @@ -1370,7 +1370,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) } else { struct RArray *ary = mrb_ary_ptr(v); - size_t len = ary->len; + int len = ary->len; int i; if (len > pre + post) { -- cgit v1.2.3