summaryrefslogtreecommitdiffhomepage
path: root/src/class.c
AgeCommit message (Collapse)Author
2018-09-19Removed `to_hash` conversion method.Yukihiro "Matz" Matsumoto
2018-09-19fixup! Remove implicit conversion using `to_str` method.Yukihiro "Matz" Matsumoto
2018-09-19Removed `to_ary` conversion method.Yukihiro "Matz" Matsumoto
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-07Undesirable line splitdearblue
2018-09-04Need more precise constant name check.Yukihiro "Matz" Matsumoto
This change was inspired by [ruby-bugs#7573]
2018-09-01Fix ISO/JIS section numbers.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-30New bytecode implementation of mruby VM.Yukihiro "Matz" Matsumoto
2018-06-08`mrb_class_real()` did not work for `BasicObject`; fix #4037Yukihiro "Matz" Matsumoto
2018-03-16Update `mrb_get_args` reference comment; ref #3963Yukihiro "Matz" Matsumoto
2018-03-04fix && to &! in mrb_get_args()dearblue
2018-03-04add forced block arguments feature to mrb_get_argsdearblue
2018-01-17Typo fixed.Yukihiro "Matz" Matsumoto
2017-12-20Should not overwrite `MRB_PROC_TARGET_CLASS(p)` if `p` has env; fix #3905Yukihiro "Matz" Matsumoto
2017-12-13Fixed wrong `MRB_WITHOUT_FLOAT` condition; ref #3827Yukihiro "Matz" Matsumoto
2017-12-12Modifying frozen objects will raise `FrozenError`.Yukihiro "Matz" Matsumoto
`FrozenError` is a subclass of `RuntimeError` which used to be raised. [Ruby2.5]
2017-12-06`mrb_method_search_vm()` should gives the defined class.Yukihiro "Matz" Matsumoto
Otherwise `super` may call a wrong method.
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-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-19Add `main.define_method`Yukihiro "Matz" Matsumoto
2017-10-17Remove `mrb_vm_get_argc`; ref #3826Yukihiro "Matz" Matsumoto
2017-10-11Add MRB_WITHOUT_FLOATYAMAMOTO Masaya
2017-10-10correctly handle *splat arguments in mrb_get_argc, also add mrb_vm_get_argc ↵Tomasz Dąbrowski
and mrb_get_argv Fixes #3825
2017-09-27fix: src\class.c(949): warning C4244: '=': conversion from 'mrb_int' to ↵Tomasz Dąbrowski
'int', possible loss of data
2017-09-27fix: src\class.c(949): warning C4244: '=': conversion from 'mrb_int' to ↵Tomasz Dąbrowski
'int', possible loss of data
2017-09-27fix: src\class.c(583): warning C4244: '=': conversion from 'mrb_int' to ↵Tomasz Dąbrowski
'int', possible loss of data
2017-09-06Avoid calling `mrb_funcall` to invoke `#initialize` from `Class.new`.Yukihiro "Matz" Matsumoto
If `#initialize` is implemented in C, we don't need stack consuming `mrb_funcall`.
2017-09-04Call `initialize` only when it's not empty.Yukihiro "Matz" Matsumoto
2017-09-01Update method cache clearing.Yukihiro "Matz" Matsumoto
2017-08-26Check for ability to skip optional argument parsing.Yukihiro "Matz" Matsumoto
2017-08-22Added method cache.Yukihiro "Matz" Matsumoto
To enable method cache, define `MRB_METHOD_CACHE` or `MRB_METHOD_CACHE_SIZE`. The cache size must be power of 2. The default cache size is 128. The measurement: I measured simple benchmarks found in benchmark/ directory. With method cache enabled, we gained 6-8% performance improvement, with 97-99% cache hit rate.
2017-08-22`mrb_obj_respond_to` to use `mrb_method_search_vm`.Yukihiro "Matz" Matsumoto
2017-08-18Separate `mrb_str_buf_new` and `mrb_str_new_capa`.Yukihiro "Matz" Matsumoto
`mrb_str_buf_new` is an old function that ensures capacity size of `MRB_STR_BUF_MIN_SIZE` minimum. Usually one need to use `mrb_str_new_capa` instead.
2017-08-01Better class name management.Yukihiro "Matz" Matsumoto
The change removes several internal instance variables used by class name management. The variables `__classid__` and `__classpath__` are no longer available. `__outer__` is used only for unnamed outer classes/modules (and will be removed after they are named). [Important note] Along with this change we removed several public functions. - mrb_class_outer_module() - mrb_class_sym() We believe no one have used those functions, but if you do, please ask us for the workaround.
2017-08-01Cosmetic changes (removing spaces before `*` in return types).Yukihiro "Matz" Matsumoto
2017-08-01Move naming unnamed classes/modulesYukihiro "Matz" Matsumoto
From `mrb_mod_const_set` to `mrb_const_set`.
2017-08-01Implements `Module::nesting' (15.2.2.3.2); ref #600, #3200Yukihiro "Matz" Matsumoto
2017-07-28Extended Module#const_get to support class pathsChristopher Aue
2017-07-27Embed small size array elements in the heap.Yukihiro "Matz" Matsumoto
It reduces the memory consumption and sometimes improve the performance as well. For example, the consumed memory size of `bench/bm_ao_render.rb` is reduced from 1.2GB to 1GB, and its total execution time become 18.795 sec from 22.229 sec.
2017-07-19Avoid constant-set duplication; ref #3747Yukihiro "Matz" Matsumoto
2017-07-18Fixed Module#to_s and #name for #const_set modulesChristopher Aue
2017-07-12Update `mrb_get_args()` document.Yukihiro "Matz" Matsumoto
2017-07-12Add "*!" argument specifier to avoid stack copying.Yukihiro "Matz" Matsumoto
2017-06-27Copy argv from VM stack to avoid use-after-free; fix #3722Yukihiro "Matz" Matsumoto