From b01670a3d391de3c7df868a8285e570564ea46cd Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 24 Jun 2013 00:41:34 +0900 Subject: fixed a bug in push back list; close #1298 --- src/parse.y | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parse.y b/src/parse.y index f5dbdb6fd..1d5366d17 100644 --- a/src/parse.y +++ b/src/parse.y @@ -3293,7 +3293,7 @@ peek_n(parser_state *p, int c, int n) list = push(list, (node*)(intptr_t)c0); } while(n--); if (p->pb) { - p->pb = push(p->pb, (node*)list); + p->pb = append(p->pb, (node*)list); } else { p->pb = list; -- cgit v1.2.3 From e9ebd6f87a395c156e4d03295f5b63a04467e1a1 Mon Sep 17 00:00:00 2001 From: kyab Date: Tue, 25 Jun 2013 02:12:56 +0900 Subject: Fix crash on load *mrb --- src/load.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/load.c b/src/load.c index e832de628..a83fc7574 100644 --- a/src/load.c +++ b/src/load.c @@ -187,7 +187,6 @@ read_rite_section_irep(mrb_state *mrb, const uint8_t *bin) { int result; size_t sirep; - size_t i; uint32_t len; uint16_t nirep; uint16_t n; @@ -200,14 +199,14 @@ read_rite_section_irep(mrb_state *mrb, const uint8_t *bin) nirep = bin_to_uint16(header->nirep); //Read Binary Data Section - for (n = 0, i = sirep; n < nirep; n++, i++) { + for (n = 0; n < nirep; n++) { result = read_rite_irep_record(mrb, bin, &len); if (result != MRB_DUMP_OK) goto error_exit; bin += len; } - result = sirep + bin_to_uint16(header->sirep); + result = nirep; error_exit: if (result < MRB_DUMP_OK) { irep_free(sirep, mrb); @@ -368,7 +367,7 @@ mrb_read_irep(mrb_state *mrb, const uint8_t *bin) bin += bin_to_uint32(section_header->section_size); } while (memcmp(section_header->section_identify, RITE_BINARY_EOF, sizeof(section_header->section_identify)) != 0); - return total_nirep; + return sirep; } static void @@ -464,7 +463,6 @@ read_rite_section_irep_file(mrb_state *mrb, FILE *fp) { int32_t result; size_t sirep; - size_t i; uint16_t nirep; uint16_t n; uint32_t len, buf_size; @@ -488,7 +486,7 @@ read_rite_section_irep_file(mrb_state *mrb, FILE *fp) } //Read Binary Data Section - for (n = 0, i = sirep; n < nirep; n++, i++) { + for (n = 0; n < nirep; n++) { void *ptr; if (fread(buf, record_header_size, 1, fp) == 0) { @@ -516,7 +514,7 @@ read_rite_section_irep_file(mrb_state *mrb, FILE *fp) goto error_exit; } - result = sirep + bin_to_uint16(header.sirep); + result = nirep; error_exit: if (buf) { mrb_free(mrb, buf); @@ -614,7 +612,7 @@ mrb_read_irep_file(mrb_state *mrb, FILE* fp) fseek(fp, fpos + section_size, SEEK_SET); } while (memcmp(section_header.section_identify, RITE_BINARY_EOF, sizeof(section_header.section_identify)) != 0); - return total_nirep; + return sirep; } mrb_value -- cgit v1.2.3 From 3ceeb0be95874fe867f25004618c31ca8e23ecf4 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 25 Jun 2013 15:38:28 +0900 Subject: add mrb_malloc_simple() that returns NULL on error --- include/mruby.h | 7 ++++--- src/gc.c | 13 +++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/include/mruby.h b/include/mruby.h index 33a15de0e..29d13c553 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -239,9 +239,10 @@ mrb_sym mrb_intern(mrb_state *mrb,const char *cstr) return mrb_intern_cstr(mrb, cstr); } -void *mrb_malloc(mrb_state*, size_t); -void *mrb_calloc(mrb_state*, size_t, size_t); -void *mrb_realloc(mrb_state*, void*, size_t); +void *mrb_malloc(mrb_state*, size_t); /* raise RuntimeError if no mem */ +void *mrb_calloc(mrb_state*, size_t, size_t); /* ditto */ +void *mrb_realloc(mrb_state*, void*, size_t); /* ditto */ +void *mrb_malloc_simple(mrb_state*, size_t); /* return NULL if no memory available */ struct RBasic *mrb_obj_alloc(mrb_state*, enum mrb_vtype, struct RClass*); void mrb_free(mrb_state*, void*); diff --git a/src/gc.c b/src/gc.c index 3e33c052c..7eee61dc1 100644 --- a/src/gc.c +++ b/src/gc.c @@ -182,6 +182,19 @@ mrb_malloc(mrb_state *mrb, size_t len) return mrb_realloc(mrb, 0, len); } +void* +mrb_malloc_simple(mrb_state *mrb, size_t len) +{ + void *p2; + + p2 = (mrb->allocf)(mrb, 0, len, mrb->ud); + if (!p2 && len > 0 && mrb->heaps) { + mrb_garbage_collect(mrb); + p2 = (mrb->allocf)(mrb, 0, len, mrb->ud); + } + return p2; +} + void* mrb_calloc(mrb_state *mrb, size_t nelem, size_t len) { -- cgit v1.2.3 From cf840c1d05f33f0e32f86508bdeae880fd059a5e Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 25 Jun 2013 15:39:34 +0900 Subject: use mrb_malloc_simple() to allocate crc buffer; close #1302 --- src/load.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/load.c b/src/load.c index a83fc7574..092ddbde8 100644 --- a/src/load.c +++ b/src/load.c @@ -565,7 +565,7 @@ mrb_read_irep_file(mrb_state *mrb, FILE* fp) fpos = ftell(fp); /* You don't need use SIZE_ERROR as block_size is enough small. */ for (i = 0; i < block_fallback_count; i++,block_size >>= 1){ - buf = mrb_malloc(mrb, block_size); + buf = mrb_malloc_simple(mrb, block_size); if (buf) break; } if (!buf) { -- cgit v1.2.3 From 1d4b26ecfc9500f7de48d24e8a1ba1ec2cc5eeac Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Wed, 26 Jun 2013 08:37:28 -0400 Subject: Add arena save/restore around use of hash KEY. --- src/hash.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/hash.c b/src/hash.c index 5d78a6ea7..9b8c546b9 100644 --- a/src/hash.c +++ b/src/hash.c @@ -145,7 +145,9 @@ mrb_hash_set(mrb_state *mrb, mrb_value hash, mrb_value key, mrb_value val) /* mr k = kh_get(ht, h, key); if (k == kh_end(h)) { /* expand */ + int ai = mrb_gc_arena_save(mrb); k = kh_put(ht, h, KEY(key)); + mrb_gc_arena_restore(mrb, ai); } kh_value(h, k) = val; @@ -169,7 +171,9 @@ mrb_hash_dup(mrb_state *mrb, mrb_value hash) for (k = kh_begin(h); k != kh_end(h); k++) { if (kh_exist(h,k)) { + int ai = mrb_gc_arena_save(mrb); ret_k = kh_put(ht, ret_h, KEY(kh_key(h,k))); + mrb_gc_arena_restore(mrb, ai); kh_val(ret_h, ret_k) = kh_val(h,k); } } -- cgit v1.2.3 From 4dfa2033b6f811e4c9c6007d0a40521d2ed2948d Mon Sep 17 00:00:00 2001 From: Jun Hiroe Date: Wed, 26 Jun 2013 23:00:42 +0900 Subject: Refactor mrb_hash_has_keyWithKey() func in hash.c --- src/hash.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/hash.c b/src/hash.c index 5d78a6ea7..b4a629743 100644 --- a/src/hash.c +++ b/src/hash.c @@ -921,17 +921,12 @@ mrb_hash_has_keyWithKey(mrb_state *mrb, mrb_value hash, mrb_value key) { khash_t(ht) *h = RHASH_TBL(hash); khiter_t k; - mrb_bool result; if (h) { k = kh_get(ht, h, key); - result = (k != kh_end(h)); + return mrb_bool_value(k != kh_end(h)); } - else { - result = 0; - } - - return mrb_bool_value(result); + return mrb_false_value(); } /* 15.2.13.4.13 */ -- cgit v1.2.3 From dfb4d555c4443e78ae530b69a9c96561d8bd38e3 Mon Sep 17 00:00:00 2001 From: Takashi Sogabe Date: Thu, 27 Jun 2013 17:15:18 +0900 Subject: Avoid read_escape() in case of regexp --- src/parse.y | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/parse.y b/src/parse.y index 1d5366d17..fda66e92c 100644 --- a/src/parse.y +++ b/src/parse.y @@ -3620,12 +3620,14 @@ parse_string(parser_state *p) tokadd(p, '\n'); } else { - pushback(p, c); - - if(type & STR_FUNC_REGEXP) + if (type & STR_FUNC_REGEXP) { tokadd(p, '\\'); - - tokadd(p, read_escape(p)); + if (c != -1) + tokadd(p, c); + } else { + pushback(p, c); + tokadd(p, read_escape(p)); + } if (hinf) hinf->line_head = FALSE; } -- cgit v1.2.3 From 872883747822750413e22b3bc5cdf2acef3b403e Mon Sep 17 00:00:00 2001 From: Cremno Date: Thu, 27 Jun 2013 12:18:35 +0200 Subject: Visual Studio 2013 support + strtof + inline - VC12 has better C99 library support due to C++11 - defined strtof for VC11 or older - define "inline" only if the C compiler is used --- include/mruby/value.h | 40 ++++++++++++++++++++----------------- mrbgems/mruby-math/src/math.c | 22 ++++++++------------ mrbgems/mruby-sprintf/src/sprintf.c | 4 ---- 3 files changed, 30 insertions(+), 36 deletions(-) diff --git a/include/mruby/value.h b/include/mruby/value.h index 06241ec76..b86b0e976 100644 --- a/include/mruby/value.h +++ b/include/mruby/value.h @@ -51,25 +51,29 @@ typedef short mrb_sym; #ifdef _MSC_VER -# define _ALLOW_KEYWORD_MACROS -# include -# define inline __inline +# ifndef __cplusplus +# define inline __inline +# endif # define snprintf _snprintf -# define isnan _isnan -# define isinf(n) (!_finite(n) && !_isnan(n)) -# define strtoll _strtoi64 -# define PRId32 "I32d" -# define PRIi32 "I32i" -# define PRIo32 "I32o" -# define PRIx32 "I32x" -# define PRIX32 "I32X" -# define PRId64 "I64d" -# define PRIi64 "I64i" -# define PRIo64 "I64o" -# define PRIx64 "I64x" -# define PRIX64 "I64X" -#else -# include +# if _MSC_VER < 1800 +# include +# define isnan _isnan +# define isinf(n) (!_finite(n) && !_isnan(n)) +# define strtoll _strtoi64 +# define strtof (float)strtod +# define PRId32 "I32d" +# define PRIi32 "I32i" +# define PRIo32 "I32o" +# define PRIx32 "I32x" +# define PRIX32 "I32X" +# define PRId64 "I64d" +# define PRIi64 "I64i" +# define PRIo64 "I64o" +# define PRIx64 "I64x" +# define PRIX64 "I64X" +# else +# include +# endif #endif typedef uint8_t mrb_bool; diff --git a/mrbgems/mruby-math/src/math.c b/mrbgems/mruby-math/src/math.c index bf3c007b4..bdc7767f7 100644 --- a/mrbgems/mruby-math/src/math.c +++ b/mrbgems/mruby-math/src/math.c @@ -12,8 +12,8 @@ #define domain_error(msg) \ mrb_raise(mrb, E_RANGE_ERROR, "Numerical argument is out of domain - " #msg) -/* math functions not provided under Microsoft Visual C++ */ -#ifdef _MSC_VER +/* math functions not provided by Microsoft Visual C++ 2012 or older */ +#if defined _MSC_VER && _MSC_VER < 1800 #define MATH_TOLERANCE 1E-12 @@ -87,6 +87,12 @@ erfc(double x) return one_sqrtpi*exp(-x*x)*q2; } +double +log2(double x) +{ + return log10(x)/log10(2.0); +} + #endif /* @@ -358,18 +364,6 @@ math_atanh(mrb_state *mrb, mrb_value obj) # define log10(x) ((x) < 0.0 ? nan("") : log10(x)) #endif -#ifndef log2 -#ifndef HAVE_LOG2 -double -log2(double x) -{ - return log10(x)/log10(2.0); -} -#else -extern double log2(double); -#endif -#endif - /* * call-seq: * Math.exp(x) -> float diff --git a/mrbgems/mruby-sprintf/src/sprintf.c b/mrbgems/mruby-sprintf/src/sprintf.c index 55698d09f..6479b19bc 100644 --- a/mrbgems/mruby-sprintf/src/sprintf.c +++ b/mrbgems/mruby-sprintf/src/sprintf.c @@ -15,10 +15,6 @@ #include #include -#ifdef _MSC_VER -#include -#endif - #ifdef HAVE_IEEEFP_H #include #endif -- cgit v1.2.3 From c23068e68f0adfb718a504032dfc30d2e7d9dbdb Mon Sep 17 00:00:00 2001 From: kyab Date: Thu, 27 Jun 2013 19:29:27 +0900 Subject: Fix include path of ArduinoDue example --- examples/targets/ArduinoDue.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/targets/ArduinoDue.rb b/examples/targets/ArduinoDue.rb index 762236f3b..a4af4a926 100644 --- a/examples/targets/ArduinoDue.rb +++ b/examples/targets/ArduinoDue.rb @@ -15,9 +15,9 @@ MRuby::CrossBuild.new("Arduino Due") do |conf| conf.cc do |cc| cc.command = "#{BIN_PATH}/arm-none-eabi-gcc" - cc.include_paths << ["#{SAM_PATH}/system/libsam -I#{SAM_PATH}/system/CMSIS/CMSIS/Include/", + cc.include_paths << ["#{SAM_PATH}/system/libsam", "#{SAM_PATH}/system/CMSIS/CMSIS/Include/", "#{SAM_PATH}/system/CMSIS/Device/ATMEL/", - "#{SAM_PATH}/cores/arduino -I#{TARGET_PATH}"] + "#{SAM_PATH}/cores/arduino", "#{SAM_PATH}/libraries","#{TARGET_PATH}"] cc.flags = %w(-g -Os -w -ffunction-sections -fdata-sections -nostdlib --param max-inline-insns-single=500 -Dprintf=iprintf -mcpu=cortex-m3 -DF_CPU=84000000L -DARDUINO=152 -D__SAM3X8E__ -mthumb -DUSB_PID=0x003e -DUSB_VID=0x2341 -DUSBCON) cc.compile_options = "%{flags} -o %{outfile} -c %{infile}" -- cgit v1.2.3 From bc91bcefcfc0b509cdfa2cd550a395314e280566 Mon Sep 17 00:00:00 2001 From: Cremno Date: Thu, 27 Jun 2013 12:30:25 +0200 Subject: include inttypes.h if _MSC_VER is not defined --- include/mruby/value.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/mruby/value.h b/include/mruby/value.h index b86b0e976..e78035b5f 100644 --- a/include/mruby/value.h +++ b/include/mruby/value.h @@ -74,6 +74,8 @@ typedef short mrb_sym; # else # include # endif +#else +# include #endif typedef uint8_t mrb_bool; -- cgit v1.2.3 From 42991fe092150260d893e7e558f25b5d5c3d84ab Mon Sep 17 00:00:00 2001 From: mimaki Date: Thu, 27 Jun 2013 20:18:48 +0900 Subject: fix unnecessary exception in mrb_get_args with "z" format. --- src/class.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/class.c b/src/class.c index f94f9a933..6eb70dce6 100644 --- a/src/class.c +++ b/src/class.c @@ -487,7 +487,7 @@ mrb_get_args(mrb_state *mrb, const char *format, ...) if (i < argc) { ss = to_str(mrb, *sp++); s = mrb_str_ptr(ss); - if (strlen(s->ptr) != s->len) { + if (strlen(s->ptr) < s->len) { mrb_raise(mrb, E_ARGUMENT_ERROR, "String contains NUL"); } *ps = s->ptr; -- cgit v1.2.3 From 0e5ecae325c63e78868fe461b40c12f69f8eb74e Mon Sep 17 00:00:00 2001 From: Jun Hiroe Date: Thu, 27 Jun 2013 21:23:12 +0900 Subject: Refactor mrb_hash_empty_p() func in hash.c --- src/hash.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/hash.c b/src/hash.c index e08de0cfe..3684b3b40 100644 --- a/src/hash.c +++ b/src/hash.c @@ -776,16 +776,9 @@ mrb_value mrb_hash_empty_p(mrb_state *mrb, mrb_value self) { khash_t(ht) *h = RHASH_TBL(self); - mrb_bool empty_p; - if (h) { - empty_p = (kh_size(h) == 0); - } - else { - empty_p = 1; - } - - return mrb_bool_value(empty_p); + if (h) return mrb_bool_value(kh_size(h) == 0); + return mrb_true_value(); } static mrb_value -- cgit v1.2.3 From 36fc42e7dbb8511efe316647dbbbdc822a929425 Mon Sep 17 00:00:00 2001 From: Akira Yumiyama Date: Tue, 25 Jun 2013 20:16:41 +0900 Subject: add nil.to_a, nil.to_f, nil.to_i methods --- mrbgems/default.gembox | 3 ++ mrbgems/mruby-object-ext/mrbgem.rake | 4 +++ mrbgems/mruby-object-ext/src/object.c | 56 +++++++++++++++++++++++++++++++++++ mrbgems/mruby-object-ext/test/nil.rb | 11 +++++++ src/object.c | 1 + test/t/nil.rb | 1 - 6 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 mrbgems/mruby-object-ext/mrbgem.rake create mode 100644 mrbgems/mruby-object-ext/src/object.c create mode 100644 mrbgems/mruby-object-ext/test/nil.rb diff --git a/mrbgems/default.gembox b/mrbgems/default.gembox index 1c6732d48..b2cdac93d 100644 --- a/mrbgems/default.gembox +++ b/mrbgems/default.gembox @@ -41,6 +41,9 @@ MRuby::GemBox.new do |conf| # Use Random class conf.gem :core => "mruby-random" + # Use extensional Object class + conf.gem :core => "mruby-object-ext" + # Use ObjectSpace class conf.gem :core => "mruby-objectspace" diff --git a/mrbgems/mruby-object-ext/mrbgem.rake b/mrbgems/mruby-object-ext/mrbgem.rake new file mode 100644 index 000000000..1f232949e --- /dev/null +++ b/mrbgems/mruby-object-ext/mrbgem.rake @@ -0,0 +1,4 @@ +MRuby::Gem::Specification.new('mruby-object-ext') do |spec| + spec.license = 'MIT' + spec.authors = 'mruby developers' +end diff --git a/mrbgems/mruby-object-ext/src/object.c b/mrbgems/mruby-object-ext/src/object.c new file mode 100644 index 000000000..70b8b4baa --- /dev/null +++ b/mrbgems/mruby-object-ext/src/object.c @@ -0,0 +1,56 @@ +#include "mruby.h" +#include "mruby/array.h" + +/* + * call-seq: + * nil.to_a -> [] + * + * Always returns an empty array. + */ + +static mrb_value +nil_to_a(mrb_state *mrb, mrb_value obj) +{ + return mrb_ary_new(mrb); +} + +/* + * call-seq: + * nil.to_f -> 0.0 + * + * Always returns zero. + */ + +static mrb_value +nil_to_f(mrb_state *mrb, mrb_value obj) +{ + return mrb_float_value(mrb, 0.0); +} + +/* + * call-seq: + * nil.to_i -> 0 + * + * Always returns zero. + */ + +static mrb_value +nil_to_i(mrb_state *mrb, mrb_value obj) +{ + return mrb_fixnum_value(0); +} + +void +mrb_mruby_object_ext_gem_init(mrb_state* mrb) +{ + struct RClass * n = mrb->nil_class; + + mrb_define_method(mrb, n, "to_a", nil_to_a, MRB_ARGS_NONE()); + mrb_define_method(mrb, n, "to_f", nil_to_f, MRB_ARGS_NONE()); + mrb_define_method(mrb, n, "to_i", nil_to_i, MRB_ARGS_NONE()); +} + +void +mrb_mruby_object_ext_gem_final(mrb_state* mrb) +{ +} diff --git a/mrbgems/mruby-object-ext/test/nil.rb b/mrbgems/mruby-object-ext/test/nil.rb new file mode 100644 index 000000000..e385dec6a --- /dev/null +++ b/mrbgems/mruby-object-ext/test/nil.rb @@ -0,0 +1,11 @@ +assert('NilClass#to_a') do + assert_equal nil.to_a, [] +end + +assert('NilClass#to_f') do + assert_equal nil.to_f, 0.0 +end + +assert('NilClass#to_i') do + assert_equal nil.to_i, 0 +end diff --git a/src/object.c b/src/object.c index a2162f77f..d6f756f18 100644 --- a/src/object.c +++ b/src/object.c @@ -5,6 +5,7 @@ */ #include "mruby.h" +#include "mruby/array.h" #include "mruby/class.h" #include "mruby/numeric.h" #include "mruby/string.h" diff --git a/test/t/nil.rb b/test/t/nil.rb index 99b1215e9..08d2acdf1 100644 --- a/test/t/nil.rb +++ b/test/t/nil.rb @@ -27,4 +27,3 @@ end assert('NilClass#to_s', '15.2.4.3.5') do assert_equal nil.to_s, '' end - -- cgit v1.2.3 From 5835406e6beccbfd97d973d876fad60a0dd70b58 Mon Sep 17 00:00:00 2001 From: Cremno Date: Fri, 28 Jun 2013 08:05:33 +0200 Subject: replaced POSIX header with standard C header --- src/crc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/crc.c b/src/crc.c index 463c7abe6..3bda7bc26 100644 --- a/src/crc.c +++ b/src/crc.c @@ -6,7 +6,7 @@ #include #include -#include +#include // Calculate CRC (CRC-16-CCITT) // -- cgit v1.2.3 From 68f31e94f564c48d8677acc8acf3ba46deebf94f Mon Sep 17 00:00:00 2001 From: fleuria Date: Fri, 28 Jun 2013 22:58:19 +0800 Subject: refactor mrb_realloc() remove the redundant codes with mrb_malloc_simple() --- include/mruby.h | 1 + src/gc.c | 23 +++++++++++++---------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/include/mruby.h b/include/mruby.h index 29d13c553..568ed4876 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -242,6 +242,7 @@ mrb_sym mrb_intern(mrb_state *mrb,const char *cstr) void *mrb_malloc(mrb_state*, size_t); /* raise RuntimeError if no mem */ void *mrb_calloc(mrb_state*, size_t, size_t); /* ditto */ void *mrb_realloc(mrb_state*, void*, size_t); /* ditto */ +void *mrb_realloc_simple(mrb_state*, void*, size_t); /* return NULL if no memory available */ void *mrb_malloc_simple(mrb_state*, size_t); /* return NULL if no memory available */ struct RBasic *mrb_obj_alloc(mrb_state*, enum mrb_vtype, struct RClass*); void mrb_free(mrb_state*, void*); diff --git a/src/gc.c b/src/gc.c index 7eee61dc1..6fc400e32 100644 --- a/src/gc.c +++ b/src/gc.c @@ -148,18 +148,28 @@ gettimeofday_time(void) #define GC_STEP_SIZE 1024 + void* -mrb_realloc(mrb_state *mrb, void *p, size_t len) +mrb_realloc_simple(mrb_state *mrb, void *p, size_t len) { void *p2; p2 = (mrb->allocf)(mrb, p, len, mrb->ud); - if (!p2 && len > 0 && mrb->heaps) { mrb_garbage_collect(mrb); p2 = (mrb->allocf)(mrb, p, len, mrb->ud); } + return p2; +} + + +void* +mrb_realloc(mrb_state *mrb, void *p, size_t len) +{ + void *p2; + + p2 = mrb_realloc_simple(mrb, p, len); if (!p2 && len) { if (mrb->out_of_memory) { /* mrb_panic(mrb); */ @@ -185,14 +195,7 @@ mrb_malloc(mrb_state *mrb, size_t len) void* mrb_malloc_simple(mrb_state *mrb, size_t len) { - void *p2; - - p2 = (mrb->allocf)(mrb, 0, len, mrb->ud); - if (!p2 && len > 0 && mrb->heaps) { - mrb_garbage_collect(mrb); - p2 = (mrb->allocf)(mrb, 0, len, mrb->ud); - } - return p2; + return mrb_realloc_simple(mrb, 0, len); } void* -- cgit v1.2.3 From 73d4491174875a0b8698f12727aeb31204fb4098 Mon Sep 17 00:00:00 2001 From: Jun Hiroe Date: Sun, 30 Jun 2013 00:03:01 +0900 Subject: Refactor mrb_obj_eq() func in object.c. --- src/object.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/object.c b/src/object.c index d6f756f18..50f2c3ab9 100644 --- a/src/object.c +++ b/src/object.c @@ -17,7 +17,7 @@ mrb_obj_eq(mrb_state *mrb, mrb_value v1, mrb_value v2) if (mrb_type(v1) != mrb_type(v2)) return FALSE; switch (mrb_type(v1)) { case MRB_TT_TRUE: - return 1; + return TRUE; case MRB_TT_FALSE: case MRB_TT_FIXNUM: -- cgit v1.2.3 From a2210274eab85de9fbcf48a6509e8485482a083c Mon Sep 17 00:00:00 2001 From: Jun Hiroe Date: Sun, 30 Jun 2013 02:11:37 +0900 Subject: Refactor mrb_range_eq() func in range.c. --- src/range.c | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/src/range.c b/src/range.c index 7e3e03136..43de0e799 100644 --- a/src/range.c +++ b/src/range.c @@ -152,30 +152,22 @@ mrb_range_eq(mrb_state *mrb, mrb_value range) struct RRange *rr; struct RRange *ro; mrb_value obj; - mrb_bool eq_p; mrb_get_args(mrb, "o", &obj); - if (mrb_obj_equal(mrb, range, obj)) { - eq_p = 1; - } - else if (!mrb_obj_is_instance_of(mrb, obj, mrb_obj_class(mrb, range))) { /* same class? */ - eq_p = 0; - } - else { - rr = mrb_range_ptr(range); - ro = mrb_range_ptr(obj); - if (!mrb_obj_equal(mrb, rr->edges->beg, ro->edges->beg) || - !mrb_obj_equal(mrb, rr->edges->end, ro->edges->end) || - rr->excl != ro->excl) { - eq_p = 0; - } - else { - eq_p = 1; - } + if (mrb_obj_equal(mrb, range, obj)) return mrb_true_value(); + if (!mrb_obj_is_instance_of(mrb, obj, mrb_obj_class(mrb, range))) { /* same class? */ + return mrb_false_value(); } - return mrb_bool_value(eq_p); + rr = mrb_range_ptr(range); + ro = mrb_range_ptr(obj); + if (!mrb_obj_equal(mrb, rr->edges->beg, ro->edges->beg) || + !mrb_obj_equal(mrb, rr->edges->end, ro->edges->end) || + rr->excl != ro->excl) { + return mrb_false_value(); + } + return mrb_true_value(); } static int -- cgit v1.2.3 From 85ea2f61449ef42c834aceecddad8cadc61e05ae Mon Sep 17 00:00:00 2001 From: Jun Hiroe Date: Sun, 30 Jun 2013 21:30:22 +0900 Subject: Refactor range_eql() func in rangec.c --- src/range.c | 37 +++++++++++++------------------------ 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/src/range.c b/src/range.c index 43de0e799..73d532d94 100644 --- a/src/range.c +++ b/src/range.c @@ -377,34 +377,23 @@ range_eql(mrb_state *mrb, mrb_value range) { mrb_value obj; struct RRange *r, *o; - mrb_bool eql_p; mrb_get_args(mrb, "o", &obj); - if (mrb_obj_equal(mrb, range, obj)) { - eql_p = 1; - } - else if (!mrb_obj_is_kind_of(mrb, obj, RANGE_CLASS)) { - eql_p = 0; - } - else { - r = mrb_range_ptr(range); - if (mrb_type(obj) != MRB_TT_RANGE) { - eql_p = 0; - } - else { - o = mrb_range_ptr(obj); - if (!mrb_eql(mrb, r->edges->beg, o->edges->beg) || - !mrb_eql(mrb, r->edges->end, o->edges->end) || - (r->excl != o->excl)) { - eql_p = 0; - } - else { - eql_p = 1; - } - } + + if (mrb_obj_equal(mrb, range, obj)) return mrb_true_value(); + if (!mrb_obj_is_kind_of(mrb, obj, RANGE_CLASS)) { + return mrb_false_value(); } + if (mrb_type(obj) != MRB_TT_RANGE) return mrb_false_value(); - return mrb_bool_value(eql_p); + r = mrb_range_ptr(range); + o = mrb_range_ptr(obj); + if (!mrb_eql(mrb, r->edges->beg, o->edges->beg) || + !mrb_eql(mrb, r->edges->end, o->edges->end) || + (r->excl != o->excl)) { + return mrb_false_value(); + } + return mrb_true_value(); } /* 15.2.14.4.15(x) */ -- cgit v1.2.3 From 57b629a988be7a39140744cd2dfc0da0e7a6a257 Mon Sep 17 00:00:00 2001 From: Jun Hiroe Date: Sun, 30 Jun 2013 22:41:37 +0900 Subject: Add Range#eql? method test. --- test/t/range.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/t/range.rb b/test/t/range.rb index fdf6b415c..4d0d4cddd 100644 --- a/test/t/range.rb +++ b/test/t/range.rb @@ -72,3 +72,9 @@ assert('Range#member?', '15.2.14.4.11') do assert_true a.member?(5) assert_false a.member?(20) end + +assert('Range#eql?', '15.2.14.4.14') do + assert_true (1..10).eql? (1..10) + assert_false (1..10).eql? (1..100) + assert_false (1..10).eql? "1..10" +end -- cgit v1.2.3 From db0eaa6352da470fdeb735403b858738897e3871 Mon Sep 17 00:00:00 2001 From: h2so5 Date: Sun, 30 Jun 2013 23:40:53 +0900 Subject: Fix Range#== --- src/range.c | 4 ++-- test/t/range.rb | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/range.c b/src/range.c index 43de0e799..7dd16ad5f 100644 --- a/src/range.c +++ b/src/range.c @@ -162,8 +162,8 @@ mrb_range_eq(mrb_state *mrb, mrb_value range) rr = mrb_range_ptr(range); ro = mrb_range_ptr(obj); - if (!mrb_obj_equal(mrb, rr->edges->beg, ro->edges->beg) || - !mrb_obj_equal(mrb, rr->edges->end, ro->edges->end) || + if (!mrb_bool(mrb_funcall(mrb, rr->edges->beg, "==", 1, ro->edges->beg)) || + !mrb_bool(mrb_funcall(mrb, rr->edges->end, "==", 1, ro->edges->end)) || rr->excl != ro->excl) { return mrb_false_value(); } diff --git a/test/t/range.rb b/test/t/range.rb index fdf6b415c..e8f57ecd5 100644 --- a/test/t/range.rb +++ b/test/t/range.rb @@ -12,6 +12,7 @@ end assert('Range#==', '15.2.14.4.1') do assert_true (1..10) == (1..10) assert_false (1..10) == (1..100) + assert_true (1..10) == Range.new(1.0, 10.0) end assert('Range#===', '15.2.14.4.2') do -- cgit v1.2.3 From 73f4ed5f0e80e2cb697ace286b4d87da6d1469d4 Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Sun, 30 Jun 2013 15:07:45 -0400 Subject: Fix some signed unsigned warnings, int to size_t. --- src/codegen.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/codegen.c b/src/codegen.c index cfbbe7286..98df2a6b1 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -426,8 +426,7 @@ push_(codegen_scope *s) static inline int new_lit(codegen_scope *s, mrb_value val) { - int i; - + size_t i; switch (mrb_type(val)) { case MRB_TT_STRING: -- cgit v1.2.3 From b36f690655eb30e196f8d2b9e266c0db50acf769 Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Sun, 30 Jun 2013 15:10:39 -0400 Subject: Change int to size_t. --- src/codegen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/codegen.c b/src/codegen.c index 98df2a6b1..517a4c6f7 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -461,7 +461,7 @@ new_lit(codegen_scope *s, mrb_value val) static inline int new_msym(codegen_scope *s, mrb_sym sym) { - int i, len; + size_t i, len; len = s->irep->slen; if (len > 256) len = 256; -- cgit v1.2.3 From 56b63f5b45df096e677222d2911ef7fd91cdf92b Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Sun, 30 Jun 2013 15:12:34 -0400 Subject: Change int to size_t --- src/codegen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/codegen.c b/src/codegen.c index 517a4c6f7..091561b45 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -480,7 +480,7 @@ new_msym(codegen_scope *s, mrb_sym sym) static inline int new_sym(codegen_scope *s, mrb_sym sym) { - int i; + size_t i; for (i=0; iirep->slen; i++) { if (s->irep->syms[i] == sym) return i; -- cgit v1.2.3 From 3f823a0ceeadcba48a332b5d89f867b23c2d332b Mon Sep 17 00:00:00 2001 From: h2so5 Date: Mon, 1 Jul 2013 11:42:38 +0900 Subject: Add mrb_class_get_under() --- include/mruby.h | 1 + src/class.c | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/include/mruby.h b/include/mruby.h index 568ed4876..b602ba8c9 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -178,6 +178,7 @@ struct RClass * mrb_class_new(mrb_state *mrb, struct RClass *super); struct RClass * mrb_module_new(mrb_state *mrb); int mrb_class_defined(mrb_state *mrb, const char *name); struct RClass * mrb_class_get(mrb_state *mrb, const char *name); +struct RClass * mrb_class_get_under(mrb_state *mrb, struct RClass *outer, const char *name); mrb_value mrb_obj_dup(mrb_state *mrb, mrb_value obj); mrb_value mrb_check_to_integer(mrb_state *mrb, mrb_value val, const char *method); diff --git a/src/class.c b/src/class.c index 6eb70dce6..e33ab0153 100644 --- a/src/class.c +++ b/src/class.c @@ -227,7 +227,13 @@ class_from_sym(mrb_state *mrb, struct RClass *klass, mrb_sym id) struct RClass * mrb_class_get(mrb_state *mrb, const char *name) { - return class_from_sym(mrb, mrb->object_class, mrb_intern(mrb, name)); + return mrb_class_get_under(mrb, mrb->object_class, name); +} + +struct RClass * +mrb_class_get_under(mrb_state *mrb, struct RClass *outer, const char *name) +{ + return class_from_sym(mrb, outer, mrb_intern(mrb, name)); } /*! -- cgit v1.2.3 From 2117f0973cbd0de28142b6abba10b5511fef9ee4 Mon Sep 17 00:00:00 2001 From: h2so5 Date: Mon, 1 Jul 2013 16:21:03 +0900 Subject: Add Object#instance_exec --- mrbgems/mruby-object-ext/src/object.c | 52 +++++++++++++++++++++++++++++++++ mrbgems/mruby-object-ext/test/object.rb | 9 ++++++ 2 files changed, 61 insertions(+) create mode 100644 mrbgems/mruby-object-ext/test/object.rb diff --git a/mrbgems/mruby-object-ext/src/object.c b/mrbgems/mruby-object-ext/src/object.c index 70b8b4baa..598ebe91d 100644 --- a/mrbgems/mruby-object-ext/src/object.c +++ b/mrbgems/mruby-object-ext/src/object.c @@ -1,5 +1,6 @@ #include "mruby.h" #include "mruby/array.h" +#include "mruby/class.h" /* * call-seq: @@ -40,6 +41,55 @@ nil_to_i(mrb_state *mrb, mrb_value obj) return mrb_fixnum_value(0); } +/* + * call-seq: + * obj.instance_exec(arg...) {|var...| block } -> obj + * + * Executes the given block within the context of the receiver + * (_obj_). In order to set the context, the variable +self+ is set + * to _obj_ while the code is executing, giving the code access to + * _obj_'s instance variables. Arguments are passed as block parameters. + * + * class KlassWithSecret + * def initialize + * @secret = 99 + * end + * end + * k = KlassWithSecret.new + * k.instance_exec(5) {|x| @secret+x } #=> 104 + */ + +mrb_value +mrb_yield_internal(mrb_state *mrb, mrb_value b, int argc, mrb_value *argv, mrb_value self, struct RClass *c); + +static mrb_value +mrb_obj_instance_exec(mrb_state *mrb, mrb_value self) +{ + mrb_value *argv; + int argc; + mrb_value blk; + struct RClass *c; + + mrb_get_args(mrb, "*&", &argv, &argc, &blk); + + if (mrb_nil_p(blk)) { + mrb_raise(mrb, E_ARGUMENT_ERROR, "no block given"); + } + + switch (mrb_type(self)) { + case MRB_TT_SYMBOL: + case MRB_TT_FIXNUM: + case MRB_TT_FLOAT: + c = 0; + break; + default: + c = mrb_class_ptr(mrb_singleton_class(mrb, self)); + break; + } + + return mrb_yield_internal(mrb, blk, argc, argv, self, c); +} + void mrb_mruby_object_ext_gem_init(mrb_state* mrb) { @@ -48,6 +98,8 @@ mrb_mruby_object_ext_gem_init(mrb_state* mrb) mrb_define_method(mrb, n, "to_a", nil_to_a, MRB_ARGS_NONE()); mrb_define_method(mrb, n, "to_f", nil_to_f, MRB_ARGS_NONE()); mrb_define_method(mrb, n, "to_i", nil_to_i, MRB_ARGS_NONE()); + + mrb_define_method(mrb, mrb->object_class, "instance_exec", mrb_obj_instance_exec, MRB_ARGS_ANY() | MRB_ARGS_BLOCK()); } void diff --git a/mrbgems/mruby-object-ext/test/object.rb b/mrbgems/mruby-object-ext/test/object.rb new file mode 100644 index 000000000..1a75622f6 --- /dev/null +++ b/mrbgems/mruby-object-ext/test/object.rb @@ -0,0 +1,9 @@ +assert('Object#instance_exec') do + class KlassWithSecret + def initialize + @secret = 99 + end + end + k = KlassWithSecret.new + assert_equal k.instance_exec(5) {|x| @secret+x }, 104 +end -- cgit v1.2.3 From 43ba7f74a2e2325fbc886fdfa0847bdbe84b5cda Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Mon, 1 Jul 2013 07:01:02 -0400 Subject: Fix unsigned/signed comparison. --- src/dump.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/dump.c b/src/dump.c index c2b987bc8..bf3d25f13 100644 --- a/src/dump.c +++ b/src/dump.c @@ -334,8 +334,7 @@ static int write_lineno_record(mrb_state *mrb, mrb_irep *irep, uint8_t* bin) { uint8_t *cur = bin; - size_t filename_len = 0; - int iseq_no; + size_t filename_len = 0, iseq_no; cur += sizeof(uint32_t); /* record size */ -- cgit v1.2.3 From d8c4ce8f49ec491488a05881850e23611446387d Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Mon, 1 Jul 2013 07:03:21 -0400 Subject: Fix unsigned/signed warning. --- src/gc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/gc.c b/src/gc.c index 6fc400e32..2be387e79 100644 --- a/src/gc.c +++ b/src/gc.c @@ -630,8 +630,7 @@ obj_free(mrb_state *mrb, struct RBasic *obj) static void root_scan_phase(mrb_state *mrb) { - int j; - size_t i, e; + size_t i, e, j; if (!is_minor_gc(mrb)) { mrb->gray_list = 0; -- cgit v1.2.3 From b39388e152981675cbc0655226e41dfcbb459fc4 Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Mon, 1 Jul 2013 07:05:47 -0400 Subject: Fix signed/unsigned warning. --- mrbgems/mruby-struct/src/struct.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mrbgems/mruby-struct/src/struct.c b/mrbgems/mruby-struct/src/struct.c index a2731ca54..7a796414d 100644 --- a/mrbgems/mruby-struct/src/struct.c +++ b/mrbgems/mruby-struct/src/struct.c @@ -185,8 +185,7 @@ static mrb_value mrb_struct_set(mrb_state *mrb, mrb_value obj, mrb_value val) { const char *name; - int i; - size_t len; + size_t i, len; mrb_sym mid; mrb_value members, slot, *ptr, *ptr_members; -- cgit v1.2.3 From 3c197f6ab1e091982ead76346e0335bfacf3adb7 Mon Sep 17 00:00:00 2001 From: Jun Hiroe Date: Mon, 1 Jul 2013 22:00:08 +0900 Subject: Refactor mrb_realloc() func in gc.c. --- src/gc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gc.c b/src/gc.c index 6fc400e32..dcbfaa890 100644 --- a/src/gc.c +++ b/src/gc.c @@ -175,12 +175,12 @@ mrb_realloc(mrb_state *mrb, void *p, size_t len) /* mrb_panic(mrb); */ } else { - mrb->out_of_memory = 1; + mrb->out_of_memory = TRUE; mrb_raise(mrb, E_RUNTIME_ERROR, "Out of memory"); } } else { - mrb->out_of_memory = 0; + mrb->out_of_memory = FALSE; } return p2; -- cgit v1.2.3 From 2e9b2ccf84e578b368d9f5ff06c4f22309987182 Mon Sep 17 00:00:00 2001 From: Jun Hiroe Date: Mon, 1 Jul 2013 22:20:32 +0900 Subject: Add Range#eql? test case. --- test/t/range.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/test/t/range.rb b/test/t/range.rb index aa414d386..da25abc0e 100644 --- a/test/t/range.rb +++ b/test/t/range.rb @@ -77,5 +77,6 @@ end assert('Range#eql?', '15.2.14.4.14') do assert_true (1..10).eql? (1..10) assert_false (1..10).eql? (1..100) + assert_false (1..10).eql? (Range.new(1.0, 10.0)) assert_false (1..10).eql? "1..10" end -- cgit v1.2.3 From 2f8e9b474f41d1fe72cbdc626fc990f2a7544a9e Mon Sep 17 00:00:00 2001 From: Jun Hiroe Date: Mon, 1 Jul 2013 23:34:56 +0900 Subject: Refactor mrb_ary_equal() func in array.c. --- src/array.c | 35 +++++++++++------------------------ 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/src/array.c b/src/array.c index 92359b033..a22730776 100644 --- a/src/array.c +++ b/src/array.c @@ -1056,39 +1056,26 @@ static mrb_value mrb_ary_equal(mrb_state *mrb, mrb_value ary1) { mrb_value ary2; - mrb_bool equal_p; + mrb_int i; mrb_get_args(mrb, "o", &ary2); - if (mrb_obj_equal(mrb, ary1, ary2)) { - equal_p = 1; - } - else if (mrb_special_const_p(ary2)) { - equal_p = 0; - } - else if (!mrb_array_p(ary2)) { + if (mrb_obj_equal(mrb, ary1, ary2)) return mrb_true_value(); + if (mrb_special_const_p(ary2)) return mrb_false_value(); + if (!mrb_array_p(ary2)) { if (!mrb_respond_to(mrb, ary2, mrb_intern2(mrb, "to_ary", 6))) { - equal_p = 0; + return mrb_false_value(); } else { - equal_p = mrb_equal(mrb, ary2, ary1); + return mrb_bool_value(mrb_equal(mrb, ary2, ary1)); } } - else if (RARRAY_LEN(ary1) != RARRAY_LEN(ary2)) { - equal_p = 0; - } - else { - mrb_int i; - - equal_p = 1; - for (i=0; i Date: Mon, 1 Jul 2013 23:51:37 +0900 Subject: Refactor mrb_ary_eql() func in array.c. --- src/array.c | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/src/array.c b/src/array.c index a22730776..ed087515a 100644 --- a/src/array.c +++ b/src/array.c @@ -1091,30 +1091,18 @@ static mrb_value mrb_ary_eql(mrb_state *mrb, mrb_value ary1) { mrb_value ary2; - mrb_bool eql_p; + mrb_int i; mrb_get_args(mrb, "o", &ary2); - if (mrb_obj_equal(mrb, ary1, ary2)) { - eql_p = 1; - } - else if (!mrb_array_p(ary2)) { - eql_p = 0; - } - else if (RARRAY_LEN(ary1) != RARRAY_LEN(ary2)) { - eql_p = 0; - } - else { - mrb_int i; - eql_p = 1; - for (i=0; i Date: Wed, 3 Jul 2013 00:13:57 +0900 Subject: Refactor mrb_define_class() method in class.c.c --- src/class.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/class.c b/src/class.c index e33ab0153..237109936 100644 --- a/src/class.c +++ b/src/class.c @@ -159,9 +159,7 @@ mrb_define_class_id(mrb_state *mrb, mrb_sym name, struct RClass *super) struct RClass* mrb_define_class(mrb_state *mrb, const char *name, struct RClass *super) { - struct RClass *c; - c = mrb_define_class_id(mrb, mrb_intern(mrb, name), super); - return c; + return mrb_define_class_id(mrb, mrb_intern(mrb, name), super); } struct RClass* -- cgit v1.2.3 From 2afae56c8eab117552db0b92adf13a0cb4352c20 Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Wed, 3 Jul 2013 06:52:19 -0400 Subject: Fix signed/unsigned warning, make pcapa a size_t --- src/codegen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/codegen.c b/src/codegen.c index 091561b45..d7d4f19b2 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -59,7 +59,7 @@ typedef struct scope { int icapa; mrb_irep *irep; - int pcapa; + size_t pcapa; int scapa; int nlocals; -- cgit v1.2.3 From c7f9ac79b70ffbb85f2709d42559fdde41bf8128 Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Wed, 3 Jul 2013 07:07:44 -0400 Subject: Fix signed/unsigned warning. --- src/codegen.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/codegen.c b/src/codegen.c index d7d4f19b2..e240995e5 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -2505,7 +2505,8 @@ codedump(mrb_state *mrb, int n) { #ifdef ENABLE_STDIO mrb_irep *irep = mrb->irep[n]; - int i, ai; + uint32_t i; + int ai; mrb_code c; if (!irep) return; -- cgit v1.2.3 From e57da6ae2a0d135af5e6400634478da27a5f4f01 Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Wed, 3 Jul 2013 07:15:30 -0400 Subject: Fix signed/unsigned warning, size_t for start_index was discarded. --- src/dump.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/dump.c b/src/dump.c index bf3d25f13..72ca9e0c3 100644 --- a/src/dump.c +++ b/src/dump.c @@ -364,13 +364,13 @@ write_lineno_record(mrb_state *mrb, mrb_irep *irep, uint8_t* bin) } static int -mrb_write_section_lineno(mrb_state *mrb, int start_index, uint8_t *bin) +mrb_write_section_lineno(mrb_state *mrb, size_t start_index, uint8_t *bin) { - int irep_no; + size_t irep_no; uint32_t section_size = 0, rlen = 0; /* size of irep record */ uint8_t *cur = bin; - if (mrb == NULL || start_index < 0 || start_index >= mrb->irep_len || bin == NULL) { + if (mrb == NULL || start_index >= mrb->irep_len || bin == NULL) { return MRB_DUMP_INVALID_ARGUMENT; } -- cgit v1.2.3 From db678329c00bd6cf08402c07e1f85f0752e9722e Mon Sep 17 00:00:00 2001 From: Jun Hiroe Date: Wed, 3 Jul 2013 20:52:48 +0900 Subject: Add comments in mrb_get_args() func. --- src/class.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/class.c b/src/class.c index 237109936..0d71886d3 100644 --- a/src/class.c +++ b/src/class.c @@ -375,20 +375,22 @@ to_hash(mrb_state *mrb, mrb_value val) format specifiers: - o: Object [mrb_value] - S: String [mrb_value] - A: Array [mrb_value] - H: Hash [mrb_value] - s: String [char*,int] - z: String [char*] - a: Array [mrb_value*,mrb_int] - f: Float [mrb_float] - i: Integer [mrb_int] - b: Boolean [mrb_bool] - n: Symbol [mrb_sym] - &: Block [mrb_value] - *: rest argument [mrb_value*,int] - |: optional + string mruby type C type note + ---------------------------------------------------------------------------------------------- + o: Object [mrb_value] + S: String [mrb_value] + A: Array [mrb_value] + H: Hash [mrb_value] + s: String [char*,int] Receive two arguments. + z: String [char*] NUL terminated string. + a: Array [mrb_value*,mrb_int] Receive two arguments. + f: Float [mrb_float] + i: Integer [mrb_int] + b: Boolean [mrb_bool] + n: Symbol [mrb_sym] + &: Block [mrb_value] + *: rest argument [mrb_value*,int] Receive the rest of the arguments as an array. + |: optional Next argument of '|' and later are optional. */ int mrb_get_args(mrb_state *mrb, const char *format, ...) -- cgit v1.2.3 From f40bd6cb473fa7a62d9122033141771de844cc68 Mon Sep 17 00:00:00 2001 From: Jun Hiroe Date: Thu, 4 Jul 2013 21:17:20 +0900 Subject: Add comments in mrb_state struct. --- include/mruby.h | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/include/mruby.h b/include/mruby.h index b602ba8c9..dd555eb8b 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -73,15 +73,15 @@ enum mrb_fiber_state { struct mrb_context { struct mrb_context *prev; - mrb_value *stack; + mrb_value *stack; /* stack of virtual machine */ mrb_value *stbase, *stend; mrb_callinfo *ci; mrb_callinfo *cibase, *ciend; - mrb_code **rescue; + mrb_code **rescue; /* exception handler stack */ int rsize; - struct RProc **ensure; + struct RProc **ensure; /* ensure handler stack */ int esize; uint8_t status; @@ -97,19 +97,19 @@ enum gc_state { typedef struct mrb_state { void *jmp; - mrb_allocf allocf; + mrb_allocf allocf; /* memory allocation function */ struct mrb_context *c; struct mrb_context *root_c; - struct RObject *exc; - struct iv_tbl *globals; - struct mrb_irep **irep; + struct RObject *exc; /* exception */ + struct iv_tbl *globals; /* global variable table */ + struct mrb_irep **irep; /* program data array */ size_t irep_len, irep_capa; mrb_sym init_sym; struct RObject *top_self; - struct RClass *object_class; + struct RClass *object_class; /* Object class */ struct RClass *class_class; struct RClass *module_class; struct RClass *proc_class; @@ -125,11 +125,11 @@ typedef struct mrb_state { struct RClass *symbol_class; struct RClass *kernel_module; - struct heap_page *heaps; + struct heap_page *heaps; /* heaps for GC */ struct heap_page *sweeps; struct heap_page *free_heaps; size_t live; /* count of live objects */ - struct RBasic *arena[MRB_ARENA_SIZE]; + struct RBasic *arena[MRB_ARENA_SIZE]; /* GC protection array */ int arena_idx; enum gc_state gc_state; /* state of gc */ -- cgit v1.2.3 From 8eab806da82d1ea48a3c0a23a8885e681a7d75e5 Mon Sep 17 00:00:00 2001 From: kyab Date: Thu, 4 Jul 2013 22:09:05 +0900 Subject: Add --pull_gems option to minirake --- minirake | 5 +++++ tasks/mruby_build_commands.rake | 11 ++++++++++- tasks/mruby_build_gem.rake | 18 ++++++++++++------ 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/minirake b/minirake index f41b9b587..69d447a15 100755 --- a/minirake +++ b/minirake @@ -317,6 +317,8 @@ class RakeApp "Require MODULE before executing rakefile."], ['--tasks', '-T', GetoptLong::NO_ARGUMENT, "Display the tasks and dependencies, then exit."], + ['--pull_gems','-p', GetoptLong::NO_ARGUMENT, + "Pull all git mrbgems."], ['--trace', '-t', GetoptLong::NO_ARGUMENT, "Turn on invoke/execute tracing."], ['--usage', '-h', GetoptLong::NO_ARGUMENT, @@ -401,6 +403,8 @@ class RakeApp require value when '--tasks' $show_tasks = true + when '--pull_gems' + $pull_gems = true when '--trace' $trace = true when '--usage' @@ -419,6 +423,7 @@ class RakeApp # Read and handle the command line options. def handle_options $verbose = false + $pull_gems = false opts = GetoptLong.new(*command_line_options) opts.each { |opt, value| do_option(opt, value) } end diff --git a/tasks/mruby_build_commands.rake b/tasks/mruby_build_commands.rake index 1d69fa54d..b678b1f0e 100644 --- a/tasks/mruby_build_commands.rake +++ b/tasks/mruby_build_commands.rake @@ -220,19 +220,28 @@ module MRuby class Command::Git < Command attr_accessor :flags - attr_accessor :clone_options + attr_accessor :clone_options, :pull_options def initialize(build) super @command = 'git' @flags = [] @clone_options = "clone %{flags} %{url} %{dir}" + @pull_options = "pull" end def run_clone(dir, url, _flags = []) _pp "GIT", url, dir.relative_path _run clone_options, { :flags => [flags, _flags].flatten.join(' '), :url => url, :dir => filename(dir) } end + + def run_pull(dir, url) + root = Dir.pwd + Dir.chdir dir + _pp "GIT PULL", url, dir.relative_path + _run pull_options + Dir.chdir root + end end class Command::Mrbc < Command diff --git a/tasks/mruby_build_gem.rake b/tasks/mruby_build_gem.rake index 870ccfa57..975b032a6 100644 --- a/tasks/mruby_build_gem.rake +++ b/tasks/mruby_build_gem.rake @@ -40,13 +40,19 @@ module MRuby elsif params[:git] url = params[:git] gemdir = "build/mrbgems/#{url.match(/([-\w]+)(\.[-\w]+|)$/).to_a[1]}" - return gemdir if File.exists?(gemdir) - options = [params[:options]] || [] - options << "--branch \"#{params[:branch]}\"" if params[:branch] - - FileUtils.mkdir_p "build/mrbgems" - git.run_clone gemdir, url, options + if File.exists?(gemdir) + if $pull_gems + git.run_pull gemdir, url + else + gemdir + end + else + options = [params[:options]] || [] + options << "--branch \"#{params[:branch]}\"" if params[:branch] + FileUtils.mkdir_p "build/mrbgems" + git.run_clone gemdir, url, options + end else fail "unknown gem option #{params}" end -- cgit v1.2.3 From 3b225972747be555f2bc2d42cdddbc1bcf3e4b7b Mon Sep 17 00:00:00 2001 From: kyab Date: Thu, 4 Jul 2013 22:18:27 +0900 Subject: Could you add me to AUTHORS? --- AUTHORS | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS b/AUTHORS index 17fe246de..da84500b6 100644 --- a/AUTHORS +++ b/AUTHORS @@ -11,3 +11,4 @@ Original Authors "mruby developers" are: Masaki Muranaka Internet Initiative Japan Inc. Tadashi FUKUZAWA + Koji Yoshioka -- cgit v1.2.3 From e8a20cb2a171e0dee56ca68f49bf1b7dbdd99511 Mon Sep 17 00:00:00 2001 From: mattn Date: Fri, 5 Jul 2013 09:52:04 +0900 Subject: Add yet another Matsumoto --- AUTHORS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/AUTHORS b/AUTHORS index 17fe246de..01cde401e 100644 --- a/AUTHORS +++ b/AUTHORS @@ -11,3 +11,5 @@ Original Authors "mruby developers" are: Masaki Muranaka Internet Initiative Japan Inc. Tadashi FUKUZAWA + Ryosuke MATSUMOTO + Yasuhiro Matsumoto -- cgit v1.2.3 From 8c838b0700ad99cd329832abca5789f3f43e8b3f Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 5 Jul 2013 10:28:33 +0900 Subject: name format updated for MATSUMOTO Ryosuke --- AUTHORS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AUTHORS b/AUTHORS index 01cde401e..c988d40d2 100644 --- a/AUTHORS +++ b/AUTHORS @@ -11,5 +11,5 @@ Original Authors "mruby developers" are: Masaki Muranaka Internet Initiative Japan Inc. Tadashi FUKUZAWA - Ryosuke MATSUMOTO + MATSUMOTO Ryosuke Yasuhiro Matsumoto -- cgit v1.2.3