summaryrefslogtreecommitdiffhomepage
path: root/src/kernel.c
AgeCommit message (Collapse)Author
2017-12-23Do not include object string representation in `NoMethodError` message.Yukihiro "Matz" Matsumoto
This information is not mandatory but causes a lot of problems in the past due to infinite recursion by redefining `to_str`, `inspect` etc.
2017-11-20Add `MRB_METHOD_TABLE_INLINE` option.Yukihiro "Matz" Matsumoto
Now the method tables (in classes/modules and caches) keeps C function pointers without wrapping in `struct RProc` objects. For the sake of portability, `mrb_method_t` is represented by the struct and union, but if the most significant bit of the pointer is not used by the platform, `mrb_method_t` should be packed in `uintptr_t` to reduce memory usage. `MRB_METHOD_TABLE_INLINE` is turned on by default for linux.
2017-11-04Merge branch 'mrb_without_float' of https://github.com/pandax381/mruby into ↵Yukihiro "Matz" Matsumoto
pandax381-mrb_without_float
2017-11-04Reimplement `block_given?`; ref #3841Yukihiro "Matz" Matsumoto
Make `block_given?` to search for the top of the scope first. The top of the scope means either: * the top method body * the enclosing class body * the top-level The special case is the method defined by `define_method` with a block as in #3841. In cases like this, the method body (given by a block) is not considered as the top of the scope. You need to use `&block` in the block parameter if you want to know if a block is given to the method. This commit also changes the behavior of `MRB_PROC_SCOPE` flag. Now it is only set if the `proc` is either a class body or a method body defined in Ruby. It is no longer set for a block that given to `define_method`.
2017-11-04The `bidx` saved in `env` may be useless; fix #3841Yukihiro "Matz" Matsumoto
When `block_given?` is called from a block given to `define_method` as a method body, the `bidx` may not be within `env` saved closure. In this case, it causes heap buffer overflow.
2017-11-04Merge branch 'master' of github.com:mruby/mrubyYAMAMOTO Masaya
2017-10-28Heavily refactored how lexical scope links are implemented; fix #3821Yukihiro "Matz" Matsumoto
Instead of `irep` links, we added a `upper` link to `struct RProc`. To make a space for the `upper` link, we moved `target_class` reference. If a `Proc` does not have `env`, `target_class` is saved in an `union` shared with `env` (if a `Proc` has env, you can tell it by `MRB_PROC_ENV_P()). Otherwise `target_class` is referenced from `env->c`. We removed links in `env` as well. This change removes 2 members from `mrb_irep` struct, thus saving 2 words per method/proc/block. This also fixes potential memory leaks due to the circular references caused by a link from `mrb_irep`.
2017-10-11Add MRB_WITHOUT_FLOATYAMAMOTO Masaya
2017-09-27fix: src\kernel.c(861): warning C4244: '=': conversion from 'mrb_int' to ↵Tomasz Dąbrowski
'int', possible loss of data
2017-09-04Restructure `irep->outer` chain; fix #3804Yukihiro "Matz" Matsumoto
Instead of `irep -> proc` chain, we use `irep -> irep` chain to avoid GC bugs like #3804. We added `target_class` reference to `mrb_irep` struct. That means one more word consumption per `irep`.
2017-08-02Now `local_variables` works when for closures; fix #3710Yukihiro "Matz" Matsumoto
2017-07-12Use "$!" specifier of `mrb_get_args`.Yukihiro "Matz" Matsumoto
2017-06-27No longer need to copy `argv` from `mrb_get_args`; ref #3722Yukihiro "Matz" Matsumoto
2017-06-22Add write barrier to protect singleton class from GC; fix #3717Yukihiro "Matz" Matsumoto
2017-06-02Fixed a bug that make a loop in singleton_class clone; fix #3687Yukihiro "Matz" Matsumoto
2017-05-23Simplify backtrace mechanism; fix #3633 #3634 #3644Yukihiro "Matz" Matsumoto
Instead of preserving a backtrace in `mrb_state`, `mrb_exc_set` keeps packed backtrace in an exception object. `#backtrace` unpacks it to an array of strings.
2017-04-22Keep reference to mrb_context from env; fix #3619Yukihiro "Matz" Matsumoto
2017-04-18Check if sc->mt is initialized before copying it.Clayton Smith
2017-04-06Fixed possible SEGV in `Kernel#block_given?`; ref #3593Yukihiro "Matz" Matsumoto
2017-04-05Save block argument position in e->cioff; fix #3593Yukihiro "Matz" Matsumoto
2017-04-03Restrict recursion levels in method_missing(); fix #3556Yukihiro "Matz" Matsumoto
Note this is a temporary fix. Error message generation (including `inspect`) should be deferred until its use.
2017-03-18Avoid mrb_check_string_type() in raising exception; fix #3506Yukihiro "Matz" Matsumoto
The change may reduce flexibility, but I believe no one wants that level of flexibility here.
2017-03-02The method_missing removal condition in a76dc04a was wrong.Yukihiro "Matz" Matsumoto
2017-02-27Remove default Kernel#method_missing.Yukihiro "Matz" Matsumoto
Internal method_missing works without problems.
2017-02-15Move #__id__ to BasicObject; ref #3417Yukihiro "Matz" Matsumoto
2017-02-15Move #instance_eval to BasicObject; ref #3417Yukihiro "Matz" Matsumoto
2017-02-15Move #__send__ to BasicObject; ref #3417Yukihiro "Matz" Matsumoto
2017-02-15Move #== and #!= to BasicObject; ref #3417Yukihiro "Matz" Matsumoto
2017-02-15Move BasicObject#method_missing to Kernel#method_missing; ref #3417Yukihiro "Matz" Matsumoto
More compatibility to CRuby. Updated tests that assume old mruby behavior.
2017-02-14Do not use mrb_funcall() if Hash#default is not overridden; ref #3421Yukihiro "Matz" Matsumoto
This change reduces the recursion level, but does not solve the stack overflow issue entirely.
2017-02-06Kernel#local_variables: Make result array uniqueksss
2017-02-04`argv` may be modified when `mrb_funcall()` is called; fix #3419Yukihiro "Matz" Matsumoto
Calling `mrb_funcall()` and `mrb_yield()` (and their related functions) are discouraged unless absolutely necessary, because it can cause this kind of issues very easily.
2017-01-06Merge pull request #3377 from ksss/respond_toYukihiro "Matz" Matsumoto
Check intern object returned by mrb_check_string_type
2017-01-06Check intern object returned by mrb_check_string_typeksss
2017-01-05Add new method Kernel#frozen?; ref #3370Yukihiro "Matz" Matsumoto
2016-12-25Fix segv when primitive valueksss
Fix #3352
2016-12-12rename prefix RBASIC_ to MRB_; ref #3340Yukihiro "Matz" Matsumoto
2016-12-11Implement Object#freezeTakashi Kokubun
2016-11-24Copy over INSTANCE_TT when duping classBouke van der Bijl
2016-11-23local_variables() should not touch unshared envYukihiro "Matz" Matsumoto
2016-11-17renamed "inline" to "istruct" to represent inline struct; ref #3251Yukihiro "Matz" Matsumoto
2016-11-17inline structures data type for mruby (MRB_TT_INLINE) (fix #3237)Tomasz Dąbrowski
Inline structures have no instance variables, no finalizer, and offer as much space as possible in RBASIC object. This means 24 bytes on 64-bit platforms and 12 bytes on 32-bit platforms. mruby-inline-struct gem is only provided for testing.
2016-10-24macro mrb_bool() may evaluate arg multiple times; ref #3228Yukihiro "Matz" Matsumoto
2016-10-23Kernel#respond_to? should return true|false onlyksss
2016-06-18fix public_methods(false)Yasuhiro Matsumoto
2015-11-27include changed from by quotes ("") to by brackets (<>); close #3032Yukihiro "Matz" Matsumoto
2015-10-20Increasing docs coverageSeba Gamboa
2015-09-23should initialize local variable prepended to falseYukihiro "Matz" Matsumoto
2015-09-18Replace 1 with TURE macroJun Hiroe
2015-09-05remove `origin` member to implement prepend from struct RClass; ref #2885Yukihiro "Matz" Matsumoto
instead origin is saved in ICLASS with MRB_FLAG_IS_ORIGIN set.