summaryrefslogtreecommitdiffhomepage
path: root/src/kernel.c
AgeCommit message (Collapse)Author
2018-09-19Remove implicit conversion using `to_str` method.Yukihiro "Matz" Matsumoto
We have added internal convenience method `__to_str` which does string type check.
2018-09-19Remove implicit conversion using `to_int` method.Yukihiro "Matz" Matsumoto
The ISO standard does not include implicit type conversion using `to_int`. This implicit conversion often causes vulnerability. There will be no more attacks like #4120. In addition, we have added internal convenience method `__to_int` which does type check and conversion (from floats).
2018-09-01Move `Kernel#send` to `mruby-metaprog` gem.Yukihiro "Matz" Matsumoto
But `BasicObject#__send__` is still available from the core.
2018-09-01Avoid `NoMethodError` exception from `mrb_func_basic_p`.Yukihiro "Matz" Matsumoto
2018-08-30Separate meta-programming features to `mruby-metaprog` gem.Yukihiro "Matz" Matsumoto
We assume meta-programming is less used in embedded environments. We have moved following methods: * Kernel module global_variables, local_variables, singleton_class, instance_variables, instance_variables_defined?, instance_variable_get, instance_variable_set, methods, private_methods, public_methods, protected_methods, singleton_methods, define_singleton_methods * Module class class_variables, class_variables_defined?, class_variable_get, class_variable_set, remove_class_variable, included_modules, instance_methods, remove_method, method_removed, constants * Module class methods constants, nesting Note: Following meta-programming methods are kept in the core: * Module class alias_method, undef_method, ancestors, const_defined?, const_get, const_set, remove_const, method_defined?, define_method * Toplevel object define_method `mruby-metaprog` gem is linked by default (specified in default.gembox). When it is removed, it will save 40KB (stripped:8KB) on x86-64 environment last time I measured.
2018-08-25Rename ambiguous function names.Yukihiro "Matz" Matsumoto
`mrb_iv_p` -> `mrb_iv_name_sym_p` `mrb_iv_check` -> `mrb_iv_name_sym_check`
2018-08-25Reorganize flags values for classes; fix #3975Yukihiro "Matz" Matsumoto
Renamed flag macro names as well: `MRB_FLAG_IS_FROZEN` -> `MRB_FL_OBJ_FROZEN` `MRB_FLAG_IS_PREPENDED` -> `MRB_FL_CLASS_IS_PREPENDED` `MRB_FLAG_IS_ORIGIN` -> `MRB_FL_CLASS_IS_ORIGIN` `MRB_FLAG_IS_INHERITED` -> `MRB_FL_CLASS_IS_INHERITED`
2018-07-30Keyword argument implemented.Yukihiro "Matz" Matsumoto
2018-07-30New bytecode implementation of mruby VM.Yukihiro "Matz" Matsumoto
2018-06-07Allow `Object#clone` to copy frozen status only; fix #4036Yukihiro "Matz" Matsumoto
Copying all flags from the original object may overwrite the clone's flags e.g. the embedded flag.
2018-06-01The `clone` method should copy object status (e.g. frozen) too; #4030Yukihiro "Matz" Matsumoto
2018-05-30Should not call `initialize_copy` for `TT_ICLASS`; fix #4027Yukihiro "Matz" Matsumoto
Since `TT_ICLASS` is a internal object that should never be revealed to Ruby world.
2018-05-30Clear `__classname__` of duped class/module; ref #4027Yukihiro "Matz" Matsumoto
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