partial VC support

This commit is contained in:
Yukihiro Matsumoto
2012-05-09 08:49:38 +09:00
parent 2e4e7f7cd1
commit f4cf8ea423
13 changed files with 59 additions and 39 deletions
+5
View File
@@ -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 */
+15 -13
View File
@@ -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 ; i<old_n_buckets ; i++ ){ \
if( !__ac_isempty(old_e_flags, old_d_flags, i) ){ \
khint_t k = kh_put_##name(h, old_keys[i]); \
kh_value(h,k) = old_vals[i]; \
{ \
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 ; i<old_n_buckets ; i++ ){ \
if( !__ac_isempty(old_e_flags, old_d_flags, i) ){ \
khint_t k = kh_put_##name(h, old_keys[i]); \
kh_value(h,k) = old_vals[i]; \
} \
} \
} \
} \
+1 -1
View File
@@ -16,7 +16,7 @@
#define NEGFIXABLE(f) ((f) >= 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);
+2 -2
View File
@@ -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;
+2 -2
View File
@@ -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*
+1
View File
@@ -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),
+4 -3
View File
@@ -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;
+2 -2
View File
@@ -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));
}
+20 -11
View File
@@ -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);
mrb_get_args(mrb, "o", &n);
int i = match_backref_number(mrb, match, n);
int i;
match_check(mrb, match);
mrb_get_args(mrb, "o", &n);
i = match_backref_number(mrb, match, n);
if (i < 0 || regs->num_regs <= i)
mrb_raise(mrb, E_INDEX_ERROR, "index %d out of matches", i);
+2 -1
View File
@@ -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)) {
+2 -1
View File
@@ -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 */
+1 -1
View File
@@ -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);
+2 -2
View File
@@ -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) {