diff options
| -rw-r--r-- | include/mruby.h | 6 | ||||
| -rw-r--r-- | mrbgems/mruby-array-ext/src/array.c | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-bin-mirb/tools/mirb/mirb.c | 1 | ||||
| -rw-r--r-- | mrbgems/mruby-compiler/mrbgem.rake | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-eval/src/eval.c | 15 | ||||
| -rw-r--r-- | mrbgems/mruby-fiber/src/fiber.c | 6 | ||||
| -rw-r--r-- | mrbgems/mruby-hash-ext/src/hash-ext.c | 6 | ||||
| -rw-r--r-- | mrbgems/mruby-io/src/file.c | 4 | ||||
| -rw-r--r-- | mrbgems/mruby-io/src/io.c | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-metaprog/src/metaprog.c | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-method/src/method.c | 8 | ||||
| -rw-r--r-- | mrbgems/mruby-print/src/print.c | 4 | ||||
| -rw-r--r-- | mrbgems/mruby-proc-ext/test/proc.c | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-sprintf/src/sprintf.c | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-string-ext/src/string.c | 6 | ||||
| -rw-r--r-- | mrbgems/mruby-struct/src/struct.c | 10 | ||||
| -rw-r--r-- | mrbgems/mruby-test/driver.c | 2 | ||||
| -rw-r--r-- | src/array.c | 13 | ||||
| -rw-r--r-- | src/class.c | 22 | ||||
| -rw-r--r-- | src/etc.c | 2 | ||||
| -rw-r--r-- | src/kernel.c | 6 | ||||
| -rw-r--r-- | src/mruby_core.rake | 4 | ||||
| -rw-r--r-- | src/proc.c | 27 | ||||
| -rw-r--r-- | src/vm.c | 3 |
24 files changed, 73 insertions, 84 deletions
diff --git a/include/mruby.h b/include/mruby.h index 52bcd58bf..18dd311f7 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -889,7 +889,7 @@ MRB_API struct RClass* mrb_define_module_under_id(mrb_state *mrb, struct RClass * | `H` | {Hash} | {mrb_value} | when `!` follows, the value may be `nil` | * | `s` | {String} | const char *, {mrb_int} | Receive two arguments; `s!` gives (`NULL`,`0`) for `nil` | * | `z` | {String} | const char * | `NULL` terminated string; `z!` gives `NULL` for `nil` | - * | `a` | {Array} | {mrb_value} *, {mrb_int} | Receive two arguments; `a!` gives (`NULL`,`0`) for `nil` | + * | `a` | {Array} | const {mrb_value} *, {mrb_int} | Receive two arguments; `a!` gives (`NULL`,`0`) for `nil` | * | `f` | {Integer}/{Float} | {mrb_float} | | * | `i` | {Integer}/{Float} | {mrb_int} | | * | `b` | boolean | {mrb_bool} | | @@ -897,7 +897,7 @@ MRB_API struct RClass* mrb_define_module_under_id(mrb_state *mrb, struct RClass * | `d` | data | void *, {mrb_data_type} const | 2nd argument will be used to check data type so it won't be modified; when `!` follows, the value may be `nil` | * | `I` | inline struct | void * | | * | `&` | block | {mrb_value} | &! raises exception if no block given. | - * | `*` | rest arguments | {mrb_value} *, {mrb_int} | Receive the rest of arguments as an array; `*!` avoid copy of the stack. | + * | `*` | rest arguments | const {mrb_value} *, {mrb_int} | Receive the rest of arguments as an array; `*!` avoid copy of the stack. | * | <code>\|</code> | optional | | After this spec following specs would be optional. | * | `?` | optional given | {mrb_bool} | `TRUE` if preceding argument is given. Used to check optional argument is given. | * | `:` | keyword args | {mrb_kwargs} const | Get keyword arguments. @see mrb_kwargs | @@ -991,7 +991,7 @@ MRB_API mrb_int mrb_get_argc(mrb_state *mrb); * * Correctly handles *splat arguments. */ -MRB_API mrb_value* mrb_get_argv(mrb_state *mrb); +MRB_API const mrb_value *mrb_get_argv(mrb_state *mrb); /** * Retrieve the first and only argument from mrb_state. diff --git a/mrbgems/mruby-array-ext/src/array.c b/mrbgems/mruby-array-ext/src/array.c index 9d7f1b28a..f6695f6b6 100644 --- a/mrbgems/mruby-array-ext/src/array.c +++ b/mrbgems/mruby-array-ext/src/array.c @@ -97,7 +97,7 @@ static mrb_value mrb_ary_values_at(mrb_state *mrb, mrb_value self) { mrb_int argc; - mrb_value *argv; + const mrb_value *argv; mrb_get_args(mrb, "*", &argv, &argc); diff --git a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c index 8fa4fa822..93a4941f4 100644 --- a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +++ b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c @@ -18,7 +18,6 @@ #include <mruby/dump.h> #include <mruby/string.h> #include <mruby/variable.h> -#include <mruby/throw.h> #include <stdlib.h> #include <string.h> diff --git a/mrbgems/mruby-compiler/mrbgem.rake b/mrbgems/mruby-compiler/mrbgem.rake index b25bdaff7..90583e64f 100644 --- a/mrbgems/mruby-compiler/mrbgem.rake +++ b/mrbgems/mruby-compiler/mrbgem.rake @@ -5,7 +5,7 @@ MRuby::Gem::Specification.new 'mruby-compiler' do |spec| lex_def = "#{dir}/core/lex.def" core_objs = Dir.glob("#{dir}/core/*.c").map { |f| - next nil if build.cxx_exception_enabled? and f =~ /(codegen).c$/ + next nil if build.cxx_exception_enabled? and f =~ /(codegen|y\.tab)\.c$/ objfile(f.pathmap("#{build_dir}/core/%n")) }.compact diff --git a/mrbgems/mruby-eval/src/eval.c b/mrbgems/mruby-eval/src/eval.c index 34a438060..d9df8678f 100644 --- a/mrbgems/mruby-eval/src/eval.c +++ b/mrbgems/mruby-eval/src/eval.c @@ -6,6 +6,7 @@ #include <mruby/opcode.h> #include <mruby/error.h> +struct REnv *mrb_env_new(mrb_state *mrb, struct mrb_context *c, mrb_callinfo *ci, int nstacks, mrb_value *stack, struct RClass *tc); mrb_value mrb_exec_irep(mrb_state *mrb, mrb_value self, struct RProc *p); mrb_value mrb_obj_instance_eval(mrb_state *mrb, mrb_value self); @@ -20,7 +21,6 @@ create_proc_from_string(mrb_state *mrb, const char *s, mrb_int len, mrb_value bi struct REnv *e; mrb_callinfo *ci; /* callinfo of eval caller */ struct RClass *target_class = NULL; - mrb_int bidx; if (!mrb_nil_p(binding)) { mrb_raise(mrb, E_ARGUMENT_ERROR, "Binding of eval must be nil."); @@ -83,16 +83,7 @@ create_proc_from_string(mrb_state *mrb, const char *s, mrb_int len, mrb_value bi e = ci->env; } else { - e = (struct REnv*)mrb_obj_alloc(mrb, MRB_TT_ENV, - (struct RClass*)target_class); - e->mid = ci->mid; - e->stack = ci[1].stackent; - e->cxt = mrb->c; - MRB_ENV_SET_LEN(e, ci->proc->body.irep->nlocals); - bidx = ci->argc; - if (ci->argc < 0) bidx = 2; - else bidx += 1; - MRB_ENV_SET_BIDX(e, bidx); + e = mrb_env_new(mrb, mrb->c, ci, ci->proc->body.irep->nlocals, ci[1].stackent, target_class); ci->env = e; } proc->e.env = e; @@ -149,7 +140,7 @@ static mrb_value f_instance_eval(mrb_state *mrb, mrb_value self) { mrb_value b; - mrb_int argc; mrb_value *argv; + mrb_int argc; const mrb_value *argv; mrb_get_args(mrb, "*!&", &argv, &argc, &b); diff --git a/mrbgems/mruby-fiber/src/fiber.c b/mrbgems/mruby-fiber/src/fiber.c index 00ee7c223..41fda9eed 100644 --- a/mrbgems/mruby-fiber/src/fiber.c +++ b/mrbgems/mruby-fiber/src/fiber.c @@ -255,7 +255,7 @@ fiber_switch(mrb_state *mrb, mrb_value self, mrb_int len, const mrb_value *a, mr static mrb_value fiber_resume(mrb_state *mrb, mrb_value self) { - mrb_value *a; + const mrb_value *a; mrb_int len; mrb_bool vmexec = FALSE; @@ -315,7 +315,7 @@ static mrb_value fiber_transfer(mrb_state *mrb, mrb_value self) { struct mrb_context *c = fiber_check(mrb, self); - mrb_value* a; + const mrb_value* a; mrb_int len; fiber_check_cfunc(mrb, mrb->c); @@ -374,7 +374,7 @@ mrb_fiber_yield(mrb_state *mrb, mrb_int len, const mrb_value *a) static mrb_value fiber_yield(mrb_state *mrb, mrb_value self) { - mrb_value *a; + const mrb_value *a; mrb_int len; mrb_get_args(mrb, "*!", &a, &len); diff --git a/mrbgems/mruby-hash-ext/src/hash-ext.c b/mrbgems/mruby-hash-ext/src/hash-ext.c index 75ebd412b..16e066c73 100644 --- a/mrbgems/mruby-hash-ext/src/hash-ext.c +++ b/mrbgems/mruby-hash-ext/src/hash-ext.c @@ -22,7 +22,8 @@ static mrb_value hash_values_at(mrb_state *mrb, mrb_value hash) { - mrb_value *argv, result; + const mrb_value *argv; + mrb_value result; mrb_int argc, i; int ai; @@ -49,7 +50,8 @@ hash_values_at(mrb_state *mrb, mrb_value hash) static mrb_value hash_slice(mrb_state *mrb, mrb_value hash) { - mrb_value *argv, result; + const mrb_value *argv; + mrb_value result; mrb_int argc, i; mrb_get_args(mrb, "*", &argv, &argc); diff --git a/mrbgems/mruby-io/src/file.c b/mrbgems/mruby-io/src/file.c index d272cab7d..ab325195c 100644 --- a/mrbgems/mruby-io/src/file.c +++ b/mrbgems/mruby-io/src/file.c @@ -115,7 +115,7 @@ mrb_file_s_umask(mrb_state *mrb, mrb_value klass) static mrb_value mrb_file_s_unlink(mrb_state *mrb, mrb_value obj) { - mrb_value *argv; + const mrb_value *argv; mrb_value pathv; mrb_int argc, i; char *path; @@ -533,7 +533,7 @@ static mrb_value mrb_file_s_chmod(mrb_state *mrb, mrb_value klass) { mrb_int mode; mrb_int argc, i; - mrb_value *filenames; + const mrb_value *filenames; int ai = mrb_gc_arena_save(mrb); mrb_get_args(mrb, "i*", &mode, &filenames, &argc); diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c index 0fa0f34b1..d4505e4f7 100644 --- a/mrbgems/mruby-io/src/io.c +++ b/mrbgems/mruby-io/src/io.c @@ -1154,7 +1154,7 @@ mrb_io_s_pipe(mrb_state *mrb, mrb_value klass) static mrb_value mrb_io_s_select(mrb_state *mrb, mrb_value klass) { - mrb_value *argv; + const mrb_value *argv; mrb_int argc; mrb_value read, read_io, write, except, timeout, list; struct timeval *tp, timerec; diff --git a/mrbgems/mruby-metaprog/src/metaprog.c b/mrbgems/mruby-metaprog/src/metaprog.c index b421226f9..f9c01ea1c 100644 --- a/mrbgems/mruby-metaprog/src/metaprog.c +++ b/mrbgems/mruby-metaprog/src/metaprog.c @@ -642,7 +642,7 @@ static mrb_value mrb_mod_remove_method(mrb_state *mrb, mrb_value mod) { mrb_int argc; - mrb_value *argv; + const mrb_value *argv; struct RClass *c = mrb_class_ptr(mod); mrb_get_args(mrb, "*", &argv, &argc); diff --git a/mrbgems/mruby-method/src/method.c b/mrbgems/mruby-method/src/method.c index c6de6a7bd..0a2897847 100644 --- a/mrbgems/mruby-method/src/method.c +++ b/mrbgems/mruby-method/src/method.c @@ -109,7 +109,7 @@ method_eql(mrb_state *mrb, mrb_value self) static mrb_value mcall(mrb_state *mrb, mrb_value recv, mrb_value proc, mrb_value name, struct RClass *owner, - mrb_int argc, mrb_value *argv, mrb_value block) + mrb_int argc, const mrb_value *argv, mrb_value block) { mrb_value ret; mrb_sym orig_mid = mrb->c->ci->mid; @@ -142,7 +142,8 @@ method_call(mrb_state *mrb, mrb_value self) mrb_value recv = mrb_iv_get(mrb, self, MRB_SYM(_recv)); struct RClass *owner = mrb_class_ptr(mrb_iv_get(mrb, self, MRB_SYM(_owner))); mrb_int argc; - mrb_value *argv, block; + const mrb_value *argv; + mrb_value block; mrb_get_args(mrb, "*&", &argv, &argc, &block); return mcall(mrb, recv, proc, name, owner, argc, argv, block); @@ -156,7 +157,8 @@ method_bcall(mrb_state *mrb, mrb_value self) mrb_value recv = mrb_iv_get(mrb, self, MRB_SYM(_recv)); mrb_value owner = mrb_iv_get(mrb, self, MRB_SYM(_owner)); mrb_int argc; - mrb_value *argv, block; + const mrb_value *argv; + mrb_value block; mrb_get_args(mrb, "o*&", &recv, &argv, &argc, &block); bind_check(mrb, recv, owner); diff --git a/mrbgems/mruby-print/src/print.c b/mrbgems/mruby-print/src/print.c index 6e91e1941..30b2930b5 100644 --- a/mrbgems/mruby-print/src/print.c +++ b/mrbgems/mruby-print/src/print.c @@ -53,7 +53,7 @@ static mrb_value mrb_print(mrb_state *mrb, mrb_value self) { mrb_int argc, i; - mrb_value *argv; + const mrb_value *argv; mrb_get_args(mrb, "*", &argv, &argc); for (i=0; i<argc; i++) { @@ -69,7 +69,7 @@ static mrb_value mrb_puts(mrb_state *mrb, mrb_value self) { mrb_int argc, i; - mrb_value *argv; + const mrb_value *argv; mrb_get_args(mrb, "*", &argv, &argc); for (i=0; i<argc; i++) { diff --git a/mrbgems/mruby-proc-ext/test/proc.c b/mrbgems/mruby-proc-ext/test/proc.c index 7072fe2e9..0253f2b60 100644 --- a/mrbgems/mruby-proc-ext/test/proc.c +++ b/mrbgems/mruby-proc-ext/test/proc.c @@ -35,7 +35,7 @@ static mrb_value cfunc_env_get(mrb_state *mrb, mrb_value self) { mrb_sym n; - mrb_value *argv; mrb_int argc; + const mrb_value *argv; mrb_int argc; mrb_method_t m; struct RProc *p; mrb_get_args(mrb, "na", &n, &argv, &argc); diff --git a/mrbgems/mruby-sprintf/src/sprintf.c b/mrbgems/mruby-sprintf/src/sprintf.c index 3ecf11afb..951b37059 100644 --- a/mrbgems/mruby-sprintf/src/sprintf.c +++ b/mrbgems/mruby-sprintf/src/sprintf.c @@ -517,7 +517,7 @@ static mrb_value mrb_f_sprintf(mrb_state *mrb, mrb_value obj) { mrb_int argc; - mrb_value *argv; + const mrb_value *argv; mrb_get_args(mrb, "*", &argv, &argc); diff --git a/mrbgems/mruby-string-ext/src/string.c b/mrbgems/mruby-string-ext/src/string.c index 4b8f99597..09cbf7995 100644 --- a/mrbgems/mruby-string-ext/src/string.c +++ b/mrbgems/mruby-string-ext/src/string.c @@ -194,7 +194,8 @@ mrb_str_concat_m(mrb_state *mrb, mrb_value self) static mrb_value mrb_str_start_with(mrb_state *mrb, mrb_value self) { - mrb_value *argv, sub; + const mrb_value *argv; + mrb_value sub; mrb_int argc, i; mrb_get_args(mrb, "*", &argv, &argc); @@ -223,7 +224,8 @@ mrb_str_start_with(mrb_state *mrb, mrb_value self) static mrb_value mrb_str_end_with(mrb_state *mrb, mrb_value self) { - mrb_value *argv, sub; + const mrb_value *argv; + mrb_value sub; mrb_int argc, i; mrb_get_args(mrb, "*", &argv, &argc); diff --git a/mrbgems/mruby-struct/src/struct.c b/mrbgems/mruby-struct/src/struct.c index 7c6f50090..c64a494a5 100644 --- a/mrbgems/mruby-struct/src/struct.c +++ b/mrbgems/mruby-struct/src/struct.c @@ -262,12 +262,12 @@ static mrb_value mrb_struct_s_def(mrb_state *mrb, mrb_value klass) { mrb_value name, rest; - mrb_value *pargv; + const mrb_value *pargv; mrb_int argcnt; mrb_int i; mrb_value b, st; mrb_sym id; - mrb_value *argv; + const mrb_value *argv; mrb_int argc; name = mrb_nil_value(); @@ -321,7 +321,7 @@ num_members(mrb_state *mrb, struct RClass *klass) /* */ static mrb_value -mrb_struct_initialize_withArg(mrb_state *mrb, mrb_int argc, mrb_value *argv, mrb_value self) +mrb_struct_initialize_withArg(mrb_state *mrb, mrb_int argc, const mrb_value *argv, mrb_value self) { struct RClass *klass = mrb_obj_class(mrb, self); mrb_int i, n; @@ -343,7 +343,7 @@ mrb_struct_initialize_withArg(mrb_state *mrb, mrb_int argc, mrb_value *argv, mrb static mrb_value mrb_struct_initialize(mrb_state *mrb, mrb_value self) { - mrb_value *argv; + const mrb_value *argv; mrb_int argc; mrb_get_args(mrb, "*!", &argv, &argc); @@ -646,7 +646,7 @@ static mrb_value mrb_struct_values_at(mrb_state *mrb, mrb_value self) { mrb_int argc; - mrb_value *argv; + const mrb_value *argv; mrb_get_args(mrb, "*", &argv, &argc); diff --git a/mrbgems/mruby-test/driver.c b/mrbgems/mruby-test/driver.c index f780e7e57..d26233683 100644 --- a/mrbgems/mruby-test/driver.c +++ b/mrbgems/mruby-test/driver.c @@ -50,7 +50,7 @@ eval_test(mrb_state *mrb) static mrb_value t_print(mrb_state *mrb, mrb_value self) { - mrb_value *argv; + const mrb_value *argv; mrb_int argc; mrb_int i; diff --git a/src/array.c b/src/array.c index c4bc554ef..8827cba9e 100644 --- a/src/array.c +++ b/src/array.c @@ -280,7 +280,7 @@ static mrb_value mrb_ary_s_create(mrb_state *mrb, mrb_value klass) { mrb_value ary; - mrb_value *vals; + const mrb_value *vals; mrb_int len; struct RArray *a; @@ -340,7 +340,7 @@ mrb_ary_plus(mrb_state *mrb, mrb_value self) { struct RArray *a1 = mrb_ary_ptr(self); struct RArray *a2; - mrb_value *ptr; + const mrb_value *ptr; mrb_int blen, len1; mrb_get_args(mrb, "a", &ptr, &blen); @@ -509,7 +509,7 @@ static mrb_value mrb_ary_push_m(mrb_state *mrb, mrb_value self) { mrb_int argc; - mrb_value *argv; + const mrb_value *argv; mrb_int len, len2; struct RArray *a; @@ -615,7 +615,8 @@ static mrb_value mrb_ary_unshift_m(mrb_state *mrb, mrb_value self) { struct RArray *a = mrb_ary_ptr(self); - mrb_value *vals, *ptr; + const mrb_value *vals; + mrb_value *ptr; mrb_int alen, len; mrb_get_args(mrb, "*!", &vals, &alen); @@ -832,7 +833,7 @@ aget_index(mrb_state *mrb, mrb_value index) #endif else { mrb_int i, argc; - mrb_value *argv; + const mrb_value *argv; mrb_get_args(mrb, "i*!", &i, &argv, &argc); return i; @@ -947,7 +948,7 @@ mrb_ary_aset(mrb_state *mrb, mrb_value self) ary_modify(mrb, mrb_ary_ptr(self)); if (mrb_get_argc(mrb) == 2) { - mrb_value *vs = mrb_get_argv(mrb); + const mrb_value *vs = mrb_get_argv(mrb); v1 = vs[0]; v2 = vs[1]; /* a[n..m] = v */ diff --git a/src/class.c b/src/class.c index bbf64e8ea..f00d3c782 100644 --- a/src/class.c +++ b/src/class.c @@ -806,7 +806,7 @@ mrb_get_argc(mrb_state *mrb) return argc; } -MRB_API mrb_value* +MRB_API const mrb_value* mrb_get_argv(mrb_state *mrb) { mrb_int argc = mrb->c->ci->argc; @@ -856,7 +856,7 @@ void mrb_hash_check_kdict(mrb_state *mrb, mrb_value self); H: Hash [mrb_value] when ! follows, the value may be nil s: String [const char*,mrb_int] Receive two arguments; s! gives (NULL,0) for nil z: String [const char*] NUL terminated string; z! gives NULL for nil - a: Array [mrb_value*,mrb_int] Receive two arguments; a! gives (NULL,0) for nil + a: Array [const mrb_value*,mrb_int] Receive two arguments; a! gives (NULL,0) for nil c: Class/Module [strcut RClass*] f: Integer/Float [mrb_float] i: Integer/Float [mrb_int] @@ -865,7 +865,7 @@ void mrb_hash_check_kdict(mrb_state *mrb, mrb_value self); d: data [void*,mrb_data_type const] 2nd argument will be used to check data type so it won't be modified; when ! follows, the value may be nil I: inline struct [void*] &: block [mrb_value] &! raises exception if no block given - *: rest argument [mrb_value*,mrb_int] The rest of the arguments as an array; *! avoid copy of the stack + *: rest argument [const mrb_value*,mrb_int] The rest of the arguments as an array; *! avoid copy of the stack |: optional Following arguments are optional ?: optional given [mrb_bool] true if preceding argument (optional) is given ':': keyword args [mrb_kwargs const] Get keyword arguments @@ -1083,10 +1083,10 @@ mrb_get_args(mrb_state *mrb, const char *format, ...) { mrb_value aa; struct RArray *a; - mrb_value **pb; + const mrb_value **pb; mrb_int *pl; - pb = va_arg(ap, mrb_value**); + pb = va_arg(ap, const mrb_value**); pl = va_arg(ap, mrb_int*); if (i < argc) { aa = argv[i++]; @@ -1215,11 +1215,11 @@ mrb_get_args(mrb_state *mrb, const char *format, ...) case '*': { - mrb_value **var; + const mrb_value **var; mrb_int *pl; mrb_bool nocopy = (altmode || !argv_on_stack) ? TRUE : FALSE; - var = va_arg(ap, mrb_value**); + var = va_arg(ap, const mrb_value**); pl = va_arg(ap, mrb_int*); if (argc > i) { *pl = argc-i; @@ -1754,7 +1754,7 @@ static mrb_value mod_attr_define(mrb_state *mrb, mrb_value mod, mrb_value (*accessor)(mrb_state *, mrb_value), mrb_sym (*access_name)(mrb_state *, mrb_sym)) { struct RClass *c = mrb_class_ptr(mod); - mrb_value *argv; + const mrb_value *argv; mrb_int argc, i; int ai; @@ -1843,7 +1843,7 @@ mrb_value mrb_instance_new(mrb_state *mrb, mrb_value cv) { mrb_value obj, blk; - mrb_value *argv; + const mrb_value *argv; mrb_int argc; mrb_sym init; @@ -2248,7 +2248,7 @@ mrb_mod_undef(mrb_state *mrb, mrb_value mod) { struct RClass *c = mrb_class_ptr(mod); mrb_int argc; - mrb_value *argv; + const mrb_value *argv; mrb_get_args(mrb, "*", &argv, &argc); while (argc--) { @@ -2468,7 +2468,7 @@ mrb_mod_dup(mrb_state *mrb, mrb_value self) static mrb_value mrb_mod_module_function(mrb_state *mrb, mrb_value mod) { - mrb_value *argv; + const mrb_value *argv; mrb_int argc, i; mrb_sym mid; mrb_method_t m; @@ -123,7 +123,7 @@ mrb_obj_id(mrb_value obj) return MakeID(mrb_symbol(obj)); case MRB_TT_INTEGER: return MakeID(mrb_int_id(mrb_integer(obj))); -#ifdef MRB_NO_FLOAT +#ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: return MakeID(mrb_float_id(mrb_float(obj))); #endif diff --git a/src/kernel.c b/src/kernel.c index c34d0bb6e..e29c33874 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -219,7 +219,7 @@ mrb_obj_class_m(mrb_state *mrb, mrb_value self) } static mrb_value -mrb_obj_extend(mrb_state *mrb, mrb_int argc, mrb_value *argv, mrb_value obj) +mrb_obj_extend(mrb_state *mrb, mrb_int argc, const mrb_value *argv, mrb_value obj) { mrb_int i; @@ -264,7 +264,7 @@ mrb_obj_extend(mrb_state *mrb, mrb_int argc, mrb_value *argv, mrb_value obj) static mrb_value mrb_obj_extend_m(mrb_state *mrb, mrb_value self) { - mrb_value *argv; + const mrb_value *argv; mrb_int argc; mrb_get_args(mrb, "*", &argv, &argc); @@ -524,7 +524,7 @@ static mrb_value mrb_obj_missing(mrb_state *mrb, mrb_value mod) { mrb_sym name; - mrb_value *a; + const mrb_value *a; mrb_int alen; mrb_get_args(mrb, "n*!", &name, &a, &alen); diff --git a/src/mruby_core.rake b/src/mruby_core.rake index 73fddb220..0b9e94a20 100644 --- a/src/mruby_core.rake +++ b/src/mruby_core.rake @@ -4,12 +4,12 @@ MRuby.each_target do current_build_dir = "#{build_dir}/#{relative_from_root}" objs = Dir.glob("#{current_dir}/*.c").map { |f| - next nil if cxx_exception_enabled? and f =~ /(error|vm).c$/ + next nil if cxx_exception_enabled? and f =~ /(error|vm|gc)\.c$/ objfile(f.pathmap("#{current_build_dir}/%n")) }.compact if cxx_exception_enabled? - objs += %w(vm error).map { |v| compile_as_cxx "#{current_dir}/#{v}.c", "#{current_build_dir}/#{v}.cxx" } + objs += %w(vm error gc).map { |v| compile_as_cxx "#{current_dir}/#{v}.c", "#{current_build_dir}/#{v}.cxx" } end self.libmruby_objs << objs diff --git a/src/proc.c b/src/proc.c index b971b6520..732e94817 100644 --- a/src/proc.c +++ b/src/proc.c @@ -57,22 +57,21 @@ mrb_proc_new(mrb_state *mrb, const mrb_irep *irep) return p; } -static struct REnv* -env_new(mrb_state *mrb, mrb_int nlocals) +struct REnv* +mrb_env_new(mrb_state *mrb, struct mrb_context *c, mrb_callinfo *ci, int nstacks, mrb_value *stack, struct RClass *tc) { struct REnv *e; - mrb_callinfo *ci = mrb->c->ci; mrb_int bidx; - e = (struct REnv*)mrb_obj_alloc(mrb, MRB_TT_ENV, NULL); - MRB_ENV_SET_LEN(e, nlocals); + e = (struct REnv*)mrb_obj_alloc(mrb, MRB_TT_ENV, tc); + MRB_ENV_SET_LEN(e, nstacks); bidx = ci->argc; - if (ci->argc < 0) bidx = 2; + if (bidx < 0) bidx = 2; else bidx += 1; MRB_ENV_SET_BIDX(e, bidx); e->mid = ci->mid; - e->stack = mrb->c->stack; - e->cxt = mrb->c; + e->stack = stack; + e->cxt = c; return e; } @@ -90,12 +89,8 @@ closure_setup(mrb_state *mrb, struct RProc *p) else if (up) { struct RClass *tc = MRB_PROC_TARGET_CLASS(p); - e = env_new(mrb, up->body.irep->nlocals); + e = mrb_env_new(mrb, mrb->c, ci, up->body.irep->nlocals, mrb->c->stack, tc); ci->env = e; - if (tc) { - e->c = tc; - mrb_field_write_barrier(mrb, (struct RBasic*)e, (struct RBasic*)tc); - } if (MRB_PROC_ENV_P(up) && MRB_PROC_ENV(up)->cxt == NULL) { e->mid = MRB_PROC_ENV(up)->mid; } @@ -137,15 +132,11 @@ mrb_proc_new_cfunc_with_env(mrb_state *mrb, mrb_func_t func, mrb_int argc, const struct REnv *e; int i; - p->e.env = e = env_new(mrb, argc); + p->e.env = e = mrb_env_new(mrb, mrb->c, mrb->c->ci, 0, NULL, NULL); p->flags |= MRB_PROC_ENVSET; mrb_field_write_barrier(mrb, (struct RBasic*)p, (struct RBasic*)e); MRB_ENV_CLOSE(e); - /* NOTE: Prevents keeping invalid addresses when NoMemoryError is raised from `mrb_malloc()`. */ - e->stack = NULL; - MRB_ENV_SET_LEN(e, 0); - e->stack = (mrb_value*)mrb_malloc(mrb, sizeof(mrb_value) * argc); MRB_ENV_SET_LEN(e, argc); @@ -552,7 +552,8 @@ mrb_value mrb_f_send(mrb_state *mrb, mrb_value self) { mrb_sym name; - mrb_value block, *argv, *regs; + mrb_value block, *regs; + const mrb_value *argv; mrb_int argc, i, len; mrb_method_t m; struct RClass *c; |
