From ff47338973feec4b09f0025c1ffd02a6cf6eadaa Mon Sep 17 00:00:00 2001 From: NAKAMURA Usaku Date: Fri, 20 Apr 2012 15:34:41 +0900 Subject: In mruby.h, there is no definitions of RSTRING_* here, so cannot compile if the compiler is not GCC. --- include/mruby.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'include/mruby.h') diff --git a/include/mruby.h b/include/mruby.h index 506158d3c..123f802ad 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -441,11 +441,14 @@ void mrb_bug(const char *fmt, ...); #ifdef __GNUC__ # define NUM2CHR(x) __extension__ ({mrb_value num2chr_x = (x); NUM2CHR_internal(num2chr_x);}) #else +/* TODO: there is no definitions of RSTRING_* here, so cannot compile. static inline char NUM2CHR(mrb_value x) { return NUM2CHR_internal(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); -- cgit v1.2.3 From 43683ec87870f8d19767a7fa586433441bb368a2 Mon Sep 17 00:00:00 2001 From: mimaki Date: Fri, 20 Apr 2012 17:03:43 +0900 Subject: add file header in mruby.h --- include/mruby.h | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'include/mruby.h') diff --git a/include/mruby.h b/include/mruby.h index 123f802ad..8084735bf 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -1,3 +1,29 @@ +/* +** mruby - An embeddable Ruby implementaion +** +** Copyright (c) mruby developers 2010-2012 +** +** Permission is hereby granted, free of charge, to any person obtaining +** a copy of this software and associated documentation files (the +** "Software"), to deal in the Software without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Software, and to +** permit persons to whom the Software is furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be +** included in all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +** +** [ MIT license: http://www.opensource.org/licenses/mit-license.php ] +*/ #ifndef MRUBY_H #define MRUBY_H -- cgit v1.2.3 From 3d034f52ddb878dc44c086d72da475c78f29ff9b Mon Sep 17 00:00:00 2001 From: Frank Celler Date: Fri, 20 Apr 2012 15:10:46 +0200 Subject: assign will break under C++ even when included with extern C --- 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 8084735bf..0097c397b 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -134,7 +134,7 @@ static inline mrb_value mrb_obj_value(void *p) { mrb_value v; - struct RBasic *b = p; + struct RBasic *b = (struct RBasic*) p; v.tt = b->tt; v.value.p = p; -- cgit v1.2.3 From 41bf311cd1997ad2d20d451fe627b241aed571d3 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Fri, 20 Apr 2012 22:31:58 +0900 Subject: remove dependency to SIZEOF_INT --- include/mrbconf.h | 1 - include/mruby.h | 54 ------------------------------------------------------ src/numeric.c | 2 +- src/string.c | 6 +++--- src/transcode.c | 8 ++++---- 5 files changed, 8 insertions(+), 63 deletions(-) (limited to 'include/mruby.h') diff --git a/include/mrbconf.h b/include/mrbconf.h index 81c19a121..bc54de420 100644 --- a/include/mrbconf.h +++ b/include/mrbconf.h @@ -22,7 +22,6 @@ typedef intptr_t mrb_sym; #undef HAVE_UNISTD_H /* WINDOWS */ #define HAVE_UNISTD_H /* LINUX */ -#define SIZEOF_INT 4 #define SIZEOF_SHORT 2 #define SIZEOF_LONG 4 #define SIZEOF_LONG_LONG 8 diff --git a/include/mruby.h b/include/mruby.h index 8084735bf..f1cf1ca01 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -560,60 +560,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) -#if defined PRIdPTR && !defined PRI_VALUE_PREFIX -#define PRIdVALUE PRIdPTR -#define PRIiVALUE PRIiPTR -#define PRIoVALUE PRIoPTR -#define PRIuVALUE PRIuPTR -#define PRIxVALUE PRIxPTR -#define PRIXVALUE PRIXPTR -#else -#define PRIdVALUE PRI_VALUE_PREFIX"d" -#define PRIiVALUE PRI_VALUE_PREFIX"i" -#define PRIoVALUE PRI_VALUE_PREFIX"o" -#define PRIuVALUE PRI_VALUE_PREFIX"u" -#define PRIxVALUE PRI_VALUE_PREFIX"x" -#define PRIXVALUE PRI_VALUE_PREFIX"X" -#endif -#ifndef PRI_VALUE_PREFIX -# define PRI_VALUE_PREFIX "" -#endif - -#if defined PRIdPTR -# define PRI_PTRDIFF_PREFIX "t" -#elif SIZEOF_PTRDIFF_T == SIZEOF_INT -# define PRI_PTRDIFF_PREFIX -#elif SIZEOF_PTRDIFF_T == SIZEOF_LONG -# define PRI_PTRDIFF_PREFIX "l" -#elif SIZEOF_PTRDIFF_T == SIZEOF_LONG_LONG -# define PRI_PTRDIFF_PREFIX "ll" -#else -# define PRI_PTRDIFF_PREFIX -#endif -#define PRIdPTRDIFF PRI_PTRDIFF_PREFIX"d" -#define PRIiPTRDIFF PRI_PTRDIFF_PREFIX"i" -#define PRIoPTRDIFF PRI_PTRDIFF_PREFIX"o" -#define PRIuPTRDIFF PRI_PTRDIFF_PREFIX"u" -#define PRIxPTRDIFF PRI_PTRDIFF_PREFIX"x" -#define PRIXPTRDIFF PRI_PTRDIFF_PREFIX"X" - -#if defined PRIdPTR -# define PRI_SIZE_PREFIX "z" -#elif SIZEOF_SIZE_T == SIZEOF_INT -# define PRI_SIZE_PREFIX -#elif SIZEOF_SIZE_T == SIZEOF_LONG -# define PRI_SIZE_PREFIX "l" -#elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG -# define PRI_SIZE_PREFIX "ll" -#endif -#define PRIdSIZE PRI_SIZE_PREFIX"d" -#define PRIiSIZE PRI_SIZE_PREFIX"i" -#define PRIoSIZE PRI_SIZE_PREFIX"o" -#define PRIuSIZE PRI_SIZE_PREFIX"u" -#define PRIxSIZE PRI_SIZE_PREFIX"x" -#define PRIXSIZE PRI_SIZE_PREFIX"X" -#define PRIdPTRDIFF PRI_PTRDIFF_PREFIX"d" - #define KHASH 0 #define STHASH 1 #define BASICHASH 2 diff --git a/src/numeric.c b/src/numeric.c index ef4588f76..b03e57ce6 100644 --- a/src/numeric.c +++ b/src/numeric.c @@ -985,7 +985,7 @@ mrb_num2fix(mrb_state *mrb, mrb_value val) v = mrb_num2long(mrb, val); if (!FIXABLE(v)) - mrb_raise(mrb, E_RANGE_ERROR, "integer %"PRIdVALUE " out of range of fixnum", v); + mrb_raise(mrb, E_RANGE_ERROR, "integer %ld out of range of fixnum", v); return mrb_fixnum_value(v); } diff --git a/src/string.c b/src/string.c index 9556f93e8..6b8861ace 100644 --- a/src/string.c +++ b/src/string.c @@ -4833,9 +4833,9 @@ mrb_str_buf_cat_escaped_char(mrb_state *mrb, mrb_value result, unsigned int c, i char buf[CHAR_ESC_LEN + 1]; int l; -#if SIZEOF_INT > 4 - c &= 0xffffffff; -#endif + if (sizeof(c) > 4) { + c &= 0xffffffff; + } if (unicode_p) { if (c < 0x7F && ISPRINT(c)) { snprintf(buf, CHAR_ESC_LEN, "%c", c); diff --git a/src/transcode.c b/src/transcode.c index 05d2b05b1..66a4d4e42 100644 --- a/src/transcode.c +++ b/src/transcode.c @@ -1770,9 +1770,9 @@ mrb_econv_putbackable(mrb_econv_t *ec) { if (ec->num_trans == 0) return 0; -#if SIZEOF_SIZE_T > SIZEOF_INT - if (ec->elems[0].tc->readagain_len > INT_MAX) return INT_MAX; -#endif + if (sizeof(size_t) > sizeof(int)) { + if (ec->elems[0].tc->readagain_len > INT_MAX) return INT_MAX; + } return (int)ec->elems[0].tc->readagain_len; } @@ -2625,7 +2625,7 @@ str_transcode0(mrb_state *mrb, int argc, mrb_value *argv, mrb_value *self, int e transcode_loop(mrb, &fromp, &bp, (sp+slen), (bp+blen), dest, str_transcoding_resize, sname, dname, ecflags, ecopts); if (fromp != sp+slen) { - mrb_raise(mrb, E_ARGUMENT_ERROR, "not fully converted, %"PRIdPTRDIFF" bytes left", sp+slen-fromp); + mrb_raise(mrb, E_ARGUMENT_ERROR, "not fully converted, %td bytes left", sp+slen-fromp); } buf = (unsigned char *)RSTRING_PTR(dest); *bp = '\0'; -- cgit v1.2.3 From 4cb86f87a1d02ed2c9a659391f3817a930743a8f Mon Sep 17 00:00:00 2001 From: Patrick Hogan Date: Fri, 20 Apr 2012 09:32:35 -0500 Subject: #undef DEBUG for compatibility with environments that define DEBUG (like Xcode) Signed-off-by: Patrick Hogan --- include/mruby.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'include/mruby.h') diff --git a/include/mruby.h b/include/mruby.h index eb121c971..4fccfaa79 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -388,6 +388,10 @@ void mrb_write_barrier(mrb_state *, struct RBasic*); #define MRUBY_VERSION "Rite" +#ifdef DEBUG +#undef DEBUG +#endif + #if 0 #define DEBUG(x) x #else -- cgit v1.2.3 From 9e32b5152edc6d5935e4cdb0c44b7b138169027b Mon Sep 17 00:00:00 2001 From: Ranmocy Date: Fri, 20 Apr 2012 22:39:46 +0800 Subject: fixed statement alignment --- 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 8084735bf..397885ac5 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -75,7 +75,7 @@ typedef struct mrb_value { #define mrb_test(o) ((o).tt != MRB_TT_FALSE) #define mrb_fixnum(o) (o).value.i #define mrb_float(o) (o).value.f -#define mrb_symbol(o) (o).value.sym +#define mrb_symbol(o) (o).value.sym #define mrb_object(o) (o).value.p #define FIXNUM_P(o) ((o).tt == MRB_TT_FIXNUM) #define UNDEF_P(o) ((o).tt == MRB_TT_UNDEF) -- cgit v1.2.3 From 748d762e851e1954b72b7bbd70408353518e0a9d Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Sat, 21 Apr 2012 12:42:43 +0900 Subject: object instance variable do not use st.c --- include/mruby.h | 1 - src/kernel.c | 138 +++++++++++--------------------------------------------- 2 files changed, 27 insertions(+), 112 deletions(-) (limited to 'include/mruby.h') diff --git a/include/mruby.h b/include/mruby.h index e2a497eb6..d0f8af90f 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -589,7 +589,6 @@ int mrb_cmpint(mrb_state *mrb, mrb_value val, mrb_value a, mrb_value b); # define ANYARGS # endif #endif -void st_foreach_safe(mrb_state *mrb, void *table, int (*func)(ANYARGS), void * a); void mrb_define_alias(mrb_state *mrb, struct RClass *klass, const char *name1, const char *name2); 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); diff --git a/src/kernel.c b/src/kernel.c index 7a4a13501..80b64c26a 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -31,85 +31,12 @@ KHASH_MAP_INIT_INT(iv, mrb_value); #define TRUE 1 #endif -static mrb_value tst_setconst(mrb_state *mrb, mrb_value obj); -int kiv_lookup(khash_t(iv) *table, mrb_sym key, mrb_value *value); - struct obj_ivar_tag { mrb_value obj; int (*func)(mrb_sym key, mrb_value val, void * arg); void * arg; }; -static int -obj_ivar_i(mrb_sym key, int index, struct obj_ivar_tag *arg) -{ - enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK}; - struct obj_ivar_tag *data = (struct obj_ivar_tag *)arg; - if ((long)index < ROBJECT_NUMIV(data->obj)) { - mrb_value val = ROBJECT_IVPTR(data->obj)->vals[(long)index]; - if (val.tt != MRB_TT_FREE) { - return (data->func)((mrb_sym)key, val, data->arg); - } - } - return ST_CONTINUE; -} - -void -mrb_ivar_foreach(mrb_state *mrb, mrb_value obj, int (*func)(ANYARGS), void* arg) -{ - struct obj_ivar_tag data; - switch (mrb_type(obj)) { - case MRB_TT_OBJECT: - //obj_ivar_each(mrb, obj, func, arg); - if (RCLASS_IV_TBL(obj)) { - data.obj = obj; - data.func = (int (*)(mrb_sym key, mrb_value val, void * arg))func; - data.arg = arg; - st_foreach_safe(mrb, RCLASS_IV_TBL(obj), obj_ivar_i, (void *)&data); - } - break; - case MRB_TT_CLASS: - case MRB_TT_MODULE: - if (RCLASS_IV_TBL(obj)) { - st_foreach_safe(mrb, RCLASS_IV_TBL(obj), func, arg); - } - break; - default: - if (!ROBJECT_IVPTR(obj)/*generic_iv_tbl*/) break; - if (/*FL_TEST(obj, FL_EXIVAR) ||*/ mrb_special_const_p(obj)) { - mrb_value *tbl=0; - if (kiv_lookup(ROBJECT_IVPTR(obj)/*generic_iv_tbl*/, SYM2ID(obj), tbl)) { - st_foreach_safe(mrb, (void *)tbl, func, arg); - } - } - break; - } -} - -static int -inspect_i(mrb_state *mrb, mrb_sym id, mrb_value value, mrb_value str) -{ - enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK}; - mrb_value str2; - const char *ivname; - /* need not to show internal data */ - if (RSTRING_PTR(str)[0] == '-') { /* first element */ - RSTRING_PTR(str)[0] = '#'; - mrb_str_cat2(mrb, str, " "); - } - else { - mrb_str_cat2(mrb, str, ", "); - } - ivname = mrb_sym2name(mrb, id); - mrb_str_cat2(mrb, str, ivname); - mrb_str_cat2(mrb, str, "="); - str2 = mrb_inspect(mrb, value); - mrb_str_append(mrb, str, str2); - //OBJ_INFECT(str, str2); - - return ST_CONTINUE; -} - static mrb_value inspect_obj(mrb_state *mrb, mrb_value obj, mrb_value str, int recur) { @@ -117,11 +44,32 @@ inspect_obj(mrb_state *mrb, mrb_value obj, mrb_value str, int recur) mrb_str_cat2(mrb, str, " ..."); } else { - mrb_ivar_foreach(mrb, obj, inspect_i, &str); + khiter_t k; + kh_iv_t *h = RCLASS_IV_TBL(obj); + + if (h) { + for (k = kh_begin(h); k != kh_end(h); k++) { + if (kh_exist(h, k)){ + mrb_sym id = kh_key(h, k); + mrb_value value = kh_value(h, k); + + /* need not to show internal data */ + if (RSTRING_PTR(str)[0] == '-') { /* first element */ + RSTRING_PTR(str)[0] = '#'; + mrb_str_cat2(mrb, str, " "); + } + else { + mrb_str_cat2(mrb, str, ", "); + } + mrb_str_cat2(mrb, str, mrb_sym2name(mrb, id)); + mrb_str_cat2(mrb, str, "="); + mrb_str_append(mrb, str, mrb_inspect(mrb, value)); + } + } + } } mrb_str_cat2(mrb, str, ">"); RSTRING_PTR(str)[0] = '#'; - //OBJ_INFECT(str, obj); return str; } @@ -156,19 +104,9 @@ mrb_value mrb_obj_inspect(mrb_state *mrb, mrb_value obj) { if ((mrb_type(obj) == MRB_TT_OBJECT) && mrb_obj_basic_to_s_p(mrb, obj)) { - int has_ivar = 0; - mrb_value *ptr = (mrb_value *)ROBJECT_IVPTR(obj); long len = ROBJECT_NUMIV(obj); - long i; - - for (i = 0; i < len; i++) { - if (ptr[i].tt != MRB_TT_FREE) { - has_ivar = 1; - break; - } - } - if (has_ivar) { + if (len > 0) { mrb_value str; const char *c = mrb_obj_classname(mrb, obj); @@ -423,7 +361,6 @@ mrb_singleton_class_clone(mrb_state *mrb, mrb_value obj) clone->super = klass->super; if (klass->iv) { - //clone->iv = st_copy(klass->iv); clone->iv = klass->iv; } clone->mt = kh_init(mt, mrb); @@ -449,11 +386,9 @@ init_copy(mrb_state *mrb, mrb_value dest, mrb_value obj) case MRB_TT_CLASS: case MRB_TT_MODULE: if (ROBJECT(dest)->iv) { - //st_free_table(ROBJECT(dest)->iv); ROBJECT(dest)->iv = 0; } if (ROBJECT(obj)->iv) { - //ROBJECT(dest)->iv = st_copy((st_table *)ROBJECT(obj)->iv); ROBJECT(dest)->iv = ROBJECT(obj)->iv; } } @@ -994,7 +929,6 @@ class_instance_method_list(mrb_state *mrb, int argc, mrb_value *argv, struct RCl { mrb_value ary; int recur; - //st_table *list; struct RClass* oldklass; if (argc == 0) { @@ -1006,25 +940,19 @@ class_instance_method_list(mrb_state *mrb, int argc, mrb_value *argv, struct RCl recur = mrb_test(r); } - //list = st_init_numtable(); ary = mrb_ary_new(mrb); - //for (; mod; mod = RCLASS_SUPER(mod)) { oldklass = 0; while (klass && (klass != oldklass)) { - //st_foreach(RCLASS_M_TBL(mod), method_entry, (st_data_t)list); method_entry_loop(mrb, klass, ary); if ((klass->tt == MRB_TT_ICLASS) || (klass->tt == MRB_TT_SCLASS)) { } - else - { + else { if (!recur) break; } oldklass = klass; klass = klass->super; } - //st_foreach(list, func, ary); - //st_free_table(list); return ary; } @@ -1033,7 +961,6 @@ mrb_value mrb_obj_singleton_methods(mrb_state *mrb, int argc, mrb_value *argv, mrb_value obj) { mrb_value recur, ary; - //st_table *list; struct RClass* klass; if (argc == 0) { @@ -1044,22 +971,17 @@ mrb_obj_singleton_methods(mrb_state *mrb, int argc, mrb_value *argv, mrb_value o recur = argv[0]; } klass = mrb_class(mrb, obj); - //list = st_init_numtable(); ary = mrb_ary_new(mrb); if (klass && (klass->tt == MRB_TT_SCLASS)) { - //st_foreach(RCLASS_M_TBL(klass), method_entry, (st_data_t)list); method_entry_loop(mrb, klass, ary); klass = klass->super; } if (RTEST(recur)) { while (klass && ((klass->tt == MRB_TT_SCLASS) || (klass->tt == MRB_TT_ICLASS))) { - //st_foreach(RCLASS_M_TBL(klass), method_entry, (st_data_t)list); method_entry_loop(mrb, klass, ary); klass = klass->super; } } - //st_foreach(list, ins_methods_i, ary); - //st_free_table(list); return ary; } @@ -1326,14 +1248,8 @@ mrb_obj_remove_instance_variable(mrb_state *mrb, mrb_value self) } } break; - //default: - // if (mrb_special_const_p(obj)) { - // v = val; - // if (generic_ivar_remove(obj, (st_data_t)id, &v)) { - // return (VALUE)v; - // } - // } - // break; + default: + break; } mrb_name_error(mrb, sym, "instance variable %s not defined", mrb_sym2name(mrb, sym)); return mrb_nil_value(); /* not reached */ -- cgit v1.2.3