[Nov.2013 to Mar.2014] mruby news

written by Daniel Bovensiepen on 2014-04-12 22:44 UTC

Due to the sudden allocation of my first born in the beginning of this year this summary comes a little bit later and is much longer than usual. But keep scrolling and investigate the individual commits! The changes in mruby are worth it.

So, what happened with mruby between November 2013 and March 2014?


During these five months 625 commits were pushed into the mruby repository (ignoring all merges). 106 of them I identified as Bugfixes, 92 were improvements to the Standard Library, 63 improved the test system, 57 of them were refactoring the code or just small cosmetic changes, 34 made changes to the build system and 11 changed the API.


Based on issue #1794 Takeshi Watanabe implemented the new API mrb_proc_new_cfunc_with_env and mrb_cfunc_env_get(mrb_state*, mrb_int) which allows to create a Proc with user data and interact with it.

The 9 month old issue #1269, was also closed by modifying the mruby API. Matz introduced mrb_fiber_yield(mrb_state *mrb, int argc, mrb_value *argv) which allows to create a Fiber from C.

A very small API addition is mrb_context_run(mrb_state *mrb, struct RProc *proc, mrb_value self), which was introduced by Fleurer to handle use-cases like the mirb more elegant.

Standard Library

So many changes were done to the standard library. It is hard to pick the most important ones. In general mruby has stepped a big leap in the direction of being more compatible with CRuby. Lots of missing features were added:


Here a list with all commits during this month.


singleton class needs to set __outer__; fixed #1983

revert #1974; ref #1979

Kernel#send should preserve nregs in callinfo; close #1970

initialize ci->target_class in mrb_toplevel_run; ref #1942 close mattn/mruby-require#20

an int literal may have multiple underscores inside

allow underscores in integer literals; close #1960

revert 813ba5 since #1949 fixed

should not over process ensure clauses; close #1949

Don’t use ensure to fix crash of mruby-eval test.

Remove redundant NULL checks. mrb_malloc causes an exception when memory was empty.

add new function mrb_toplevel_run to prevent running through C function boudaries on exceptions; close #1942

Fix Enumerable#cycle; ref #1933

fix multiple value handling; ref #1931

Hash#__update fix typo It’s called by create Hash of over 126 keys

Hash#{reject,reject!} fix yield value

Hash#{select,select!} fix yield value

fix multiple value support of max_by; ref #1912

Float#round fix bug for infinity and nan cases

Fix behavior of Comparable methods when <=> return nil

should be able to create hash with 127+ entries; close #1894

should restore proc after rescue; close #1891

revert MRB_FIBER_RESUMED as MRB_FIBER_RESUMING to fix recurive resume

should not use nil as default value for Enumerable#count since it prevent counting nil in enums; ref #1887

stricter check for double resume; close #1885

fix bug when `0 * other object`

fix bug when `0 + other object`

fix bool number to macro

fix self modifying bug

fix return value for with_index

fix mrb_funcall calling

fix sym_intern argument type

fix #1823

MSVC: fix C4146

Hash#== and eql? should not return fixnum; ref #1823

Fix behavior Hash#eql?

Fix build on mingw32

fixed broken gettimeofday implementation for Windows

fix and add test for Proc#source_location

fix mruby command returning EXIT_SUCCESS when program file can’t be opened.

fix argument spec setting of Kernel.exit method. this method requires 1 optional argument.

Fix #1803

fix off-by-one error in attrsym

Fix #1793

fix off-by-one error in String#rindex(fixnum)

Fix Float#divmod.

fix include guard style.

fix a memory leak in mruby-random.

fix compile error of min/max macro

fix compile error

allow send method not to call mrb_funcall if calling method is implemented in Ruby; fix #1680 ref #1765

revert changes to mrbconf.h

fix SEGV bug for mrb_str_new_static

fix SEGV bug for mrb_str_new

forget to break in the switch statement

fix bug for get_valid_iv_sym

Fix unused function warning when readline enabled (mirb)

fix the position of capitalize! and downcast!, and add test for upcase!

fix possible arena overflow

more mrb_flo_to_str fixes

fdigit may be negative due to error if mrb_float is 32bit (e.g. 10**36 on 32bit arch); ref #1713 #1714

fix mrb_flo_to_str() exponent problem

normalize NaN after division that may generate NaN; fix #1712

keep stack with nlocals instead of nregs; fix #1706

Fix Kernel#global_variables for $1-$9


Fix release date{break} caused SEGV

fix NODE_SPLAT codegen

fix utf-8 codepage

escape non-ascii characters correctly in String#inspect

fix ISO reference number of String#=~.

dump.c: wrong filename table dump for multiple script files; close #1648

Fix extended arena check in gc_protect

fix some warnings emitted by ‘ruby -w’

adjust register position for return value; fix #1620

revert fix in #1620

Fix return when value expected

wrong operator precedence fixed

fix #1617

fix codegen bug in NODE_CASE

fix TypeError message

Fix typo from expornent to exponent

Fixed callinfo buffer overflow while calling ensure handlers

Avoid recursive instance variable inspections

Fix mod.constants cannot return the single character constant

avoid top-level pool release at codegen_error() and fixed some memory leaks

should not access scope after releasing memory pool

fix realloc error

Make mrb->arena variable sized. Use MRB_GC_FIXED_ARENA for old behavior. You will not see “arena overflow” error anymore, but I encourage gem authors to check your gems with MRB_GC_FIXED_ARENA to avoid memory broat.

clear ci->err after const set; revert 5b51b1; ref #1583

ci->err may be out of boud; close #1583

fix warning: “implicit conversion from enumeration type ‘enum mrb_vtype’ to different enumeration type ‘enum irep_pool_type’ [-Wenum-conversion]“

wrong size of filenames buffer

should not free buffer that is still accessed

wrong size of filenames buffer

fix irep memory leak

fix length check in read_section_debug(); fix #1572

remove possible free-after-realloc problem; close #1570

fixnum in irep->pool may overflow

cancel #1565 since it breaks mirb; instead add special treatment to heredocs

call_iseq will never be NULL

wrong return value from read_lineno_record()

forgot to free irep->reps

irep->pool not to be GCed

mirb: reset stack in the first command

small style fix


Add API to define cfunc Proc with userdata. The APIs are defined in mruby-proc-ext so include it before using this API. See mruby-proc-ext’s test code for usage. This should resolve #1794.

do not use “to_f” to retrieve floats in mrb_get_args(); close #1965

export mrb_yield_internal.

mrb_fiber_yield() is available now; you have to link mruby-fiber mrbgem to use the function; there’s no function available to create new fiber from C (countapart of Lua’s lua_newthread), but that’s because you cannot create a new fiber from C due to mruby C API design limitation. define your method to create fibers in Ruby; close #1269

revert 38e9ce21 and API changed; mrb_get_backtrace() -> renamed to mrb_exc_backtrace since this is a backtrace method implementation of Exception; mrb_get_backtrace_at() -> removed; mrb_get_backtrace() -> added to get backtrace in array (like caller)

add src/error.h for compatibility reason

move src/error.h to include/mruby/error.h

rename mrb_intern2() to mrb_intern(); huge API incompatibility; close #1513

rename API mrb_str_dup_static() -> mrb_str_pool()

add new function mrb_load_irep_file_cxt() and simplifies mruby.c

introduce mrb_context_run()


More tests for String#hex, String#oct as against 9434506035c3fc01de55ac0bc8b75497f8b5df5f

Use mrb_intern_lit instead of mrb_intern in test driver.

Add test for backquote. * Implement code generation of NODE_DXSTR. * Fix NOVAL NODE_XSTR.

add Numeric#/ tests; ref #1965

Add tests for mruby-eval.

Count crashed tests in total tests count.

should test Enumerable#first; close #1905

add tests for TrueClass

add root fiber resume test to know double resume checking is working

Add Enumerable#sort_by test

refactor Enumerable#{all?,any?} tests

add unit tests for NilClass

Add Enumerable#any?(&block) tests

Add Enumerable#all?(&block) tests

Add Fiber’s double resume test and fix it.

add test for Array#each_index if non block given

test split and to detail

add assertion method `assert_nothing_raised’

add embed string test

__FILE__ test: add support for \ as separator

add tests for Integer#divmod.

add test to check striped binary works correctly

run enabled gem’s bintest only

add tests for String#*

add cxx_abi travis test

should build “all” before “test”; close #1774

Test for UTF-8 as mattn suggests.

fix test for Array#[]

Refactor tests in kernel.rb

Update the Fixnum#chr test for UTF-8.

add test for Kernel#instance_variable_defined?

add test for __LINE__ and __FILE__

add test(requires MRB_GC_FIXED_ARENA enabled)

add tests for String#capitalize! and String#downcase!

add test for Hash#dup

add a regression test for #1706

disable LocalJumpError test since the code causes SyntaxError (not LocalJumpError) on CRuby

move Array#[] tests from mrbgems to test/t/array.rb

Increase test coverage of mruby-struct

Remove duplicate test

tests for “case” expression.

Test for raise in ensure

Test case statement with splat

Method missing and inspect tests

Test coverage of extending stack and overflow

More object_id test coverage

add some tests for [], delete_at, index, and rindex

When superclass isn’t a class tests

More singleton tests

remove unnecessary depedency in test build

Add more testing for singletons

Change :vattr= to :cattr= in respond_to? test

add some tests for case statements

modify test case to check #1606

Add is_a? test to cover issue 1477

add a comment for enable_bintest in build_config.rb

enable bintest for travis CI

add regression for #1563

add regression for #1572

add regression for #1564

add conf.enable_bintest and run_bintest

add test/bintest.rb

make test/assert.rb cruby compatible


Show error class name when raise Error

Fix a typo

use __svalue instead of ary2sv

Use CRuby compatible key in ObjectSpace.count_objects .

Fix unnecessary string macro

Use mrb_int instead of int

Use mrb_int instead of int

Use mrb_int instead of int

Use mrb_int.

Small correction to the test identification.

use the same error message

Use bool-macro instead of magic-number

add const qualifier to pacify warning; ref #1900

Reword mention of mrbtest in README

Fix typos in README

Fix literal asterisks in markdown

refactor and use assert_raise in fiber test checking exception raise

add a space after C reserved words

recover description in default.gembox

Refactor Enumerable#include?

Refactor Enumerable#any?

Refactor Enumerable#all?

Refactor assert_true

unify indent style

fix variable name typo

remove ambiguity warnings

remove invocation of strlen() on buffer of strings; with refactoring

refactoring mruby-random

small refactor

remove unused variable

s/\\”/”/g in mruby-config

chmod 755

fix indent.

fix typo

fix a comment end of include guard

use C style comments instead of C++ style comments

fix indent

fix missing spaces.

Add warning for C89-style variable declarations

Added spaces in version.h macros for complying with C++11

small refactoring; direct return

made mrb_define_class to return existing class, with heavy refactoring

remove unnecessary semicolon

Remove warning

use mrb_bool, FALSE and TRUE more

reindent parse.y

Happy new year! (update copyright year)

etc.c: small cleanup (delete unused functions)

refactor parser lineno adjustment; ref #1667

add semicolon after the statements

small refactoring (dedup mrb_vm_cv_set)

small cosmetic variable renaming

Updated the documentation to better match the way things work now that 172cd28 is merged.

renamed mrb_exc_new3 to mrb_exc_new_str

Change supress to suppress

refactor mrb_context_run()

remove scope->idx


according to JIS/ISO, Array is not Comparable

Fix ISO no in Array#* and Array#+


Add -C (–directory) option to minirake.

Catch up to latest Arduino IDE

don’t show version ’0.0.0′ in build summary since it’s default version

add summary to mrbgems without it

print gem summary in print_build_summary method

move summary of mrbgems in default gembox to its spec

Don’t redefine timeval on MingW64 environments

fix compile error check of Mrbc command

move dependency check from runtime to mrbgem.rake

Added a short description on how to add mruby gems to the compilation workflow.

Add comments to notify files are auto generated.

.PHONY should be placed after `all’

visualcpp toolchain: change compiler/linker flags

Don’t echo empty string. (Remove workaround for windows)

update compilation notes

compile assert.rb once

specialize C++ compiler in clang toolchain

Add target example for Intel Galileo board

Always include build_config.rb to compile dependency.

add -Werror=declaration-after-statement

remove -Werror=declaration-after-statement

support custom build_dir in CrossBuild

make mruby build directory customizable

add enable_debug to build_config.rb

Update the INSTALL information to be more accurate

Fix build error for MRB_WORD_BOXING

use mrbc of current build in non cross build

add enable_debug method to MRuby::Build and build debug version in travis-ci

Modify build script for gcc.

Automatically detect toolchain if it is visualcpp, and hence we drop vs2010.rake altogether – it’s no longer needed.

build with MRB_GC_FIXED_ARENA.

Fixed so that it builds with VS2013. VLA:s are not supported, because of its strict C89 world view.

GCC: add -std=gnu99 to CFLAGS

pacify some warnings on OpenBSD


Add Array#fill

Enumerator#initialize support duck-type

Array#reverse_each should return Enumerator; ref #1968

Add Array#fetch

Add to_enum unless block

Implement Kernel#define_singleton_method

Implement Object#tap

Implement Kernel#__method__

Enumerable#zip to use enumerator if mruby-enumerator gem is available

Enumerable#cycle to return enumerator

call to_a at the top of Enumerabl#zip; ref #1961

add String#oct

Support multiple values in Enumerable#zip

Add Enumerable#zip

Implement String#hex

Enumerable#find_index to support multiple values


Implement ObjectSpace.each_object .

Enumerable#reverse_each should not rely on mruby-array-ext gem

Add Enumerable#cycle

improve Enumerable#reverse_each to be efficient

Add Enumerable#reverse_each


Enumerable#one? to prune iteration when count > 1; ref #1926

Add Enumerable#one?

Hash#{reject,reject!} support return Enumerator

Hash#{select,select!} support return Enumerator if non block given

Support multiple values in Enumerable#none?

Add Enumerable#none?

Suppoert multiple values in Enumerable#minmax_by


Hash#each_{key,value} support return Enumerator if non block given

Support multiple values in Enumerable#minmax

Add Enumerable#minmax

add Enumerable#min_by as well; ref #1912

Support mulitple values in Enumerable#max_by

Add Enumerable#max_by

implement Fiber#transfer

flat_map to support multiple values; ref #1902

Add Enumerable#{flat_map,collect_concat}

add Hash#each_pair

Add Enumerable#count comment

enum methods to support multiple values; all?, any?, grep, include?, drop, drop_while, take, take_while, each_cons, each_slice, group_by, first, count

Add Enumerable#count test

Add Enumerable#count

add Fiber#== from #1865 patch

add fiber assertion from #1865 patch

Add Enumerable#first test

Enumerable#find_all return Enumerator if non block given

Enumrable#each_with_index return Enumerator if non block given

add Enumerable#sort_by

make Enumerable methods to support multiple values; collect, detect, each_with_index, find_all, inject, max, min, partition, reject, sort

Enumerable#entries to support multiple values; close #1868

add Enumerable#first to mruby-enum-ext

mruby-enumerator: move definitions in core_mod.rb to mrblib core

add mruby-enumerator

implement Array#sample in mruby-random gem

mruby-time: add gettimeofday(2) for Windows

mruby-time: fix indentation in mrb_time_asctime

mruby-time: store timezone name directly

mruby-time: timezone_names should be const

mruby-time: store strings directly instead of pointers to them

mruby-time: mrb_time_type should be const

mruby-time: fix two tiny typos in comments

mruby-time: rearrange header order

mruby-time: remove trailing whitespace

Add mruby-bin-mruby-config

add Integer#div and Float#div.

add mruby-strip tool to strip irep’s debug info

Implement sprintf(“%c”) for UTF-8.

Implement default Random instance.

use mrb_intern_lit in mruby-random

hash / hash-ext: various small changes

array implementation: several small changes

Rakefile: make bin directory

mruby-math: remove Cygwin compatibility macros

Add pluggable versioning by mruby-version

add Float#nan?

rework mruby-objectspace and gc.[ch]

Array#[]= is now range aware

move range aware aget to array.c from mruby-array-ext gem

String#length should be an alias of String#size

Added rewrite of Array#[] to mruby-array-ext gem, so that arrays can be sliced with Ranges (as a[1..-2])

add operator “!~”.

add String#reverse, String#reverse! for UTF-8

mruby-string-utf8: redefine String#size for UTF-8 string; #1646

mruby-string-utf8: UTF-8 string may contail NUL; #1646

Add mruby-string-utf8

add String#partition and String#rpartition.

add Fiber.current

Added support for Random as an argument to shuffle and shuffle!. Refactored random gem to use DATA instance type and hold mt_state inside the DATA_PTR instead of in an instance variable.

Added shuffle and shuffle! to the Array class in the Random gem.


Implement \u notation for strings and regexes.


Hash function to avoid funcalls if possible

Fix method name

use suitable type

Adapt for Float and Integer

Adapt TypeError Message for String to Integer Conversion.

use to_int to integer duck-type check

REnv uses obj->c as env link; no super

mrb_str_pool add string capa

src/string.c RESIZE_CAPA use safe name variables This has a possibility of naming conflicts

remove unnecessary operator method call; ref #1927

move conditional out of loop

mrb_str_pool use embed-string

Use MRB_ARGS_REST() instead of ARGS_REST()

need not to add assertion in STR_SET_LEN() where n is mrb_int

remove unnecessary mrb_get_args in fiber_switch

wrap expr with paren

use FiberError in vm.c

use mrb_get_args(“i”)

make Fiber#transfer compatible with CRuby

reduce object allocation in __update

Prevent accepting String value for mrb_get_args(“i”)

reduce hash creation by using update method

use File#directory? instead of File#exist?; ref c2d8b0

avoid Dir.exist? that is not available in Ruby1.8

make behavior of Fiber without block compatible with CRuby

use FiberError in fiber exception raise

remove size_t cast in mrb_assert() since ((size_t)n <= SIZE_MAX) is always true

rename mrb_yield_internal to mrb_yield_with_class since it’s no longer internal

self must be the newly created object in initialization block; close #1858

string functions arguments changed from mrb_int to size_t that would take strlen()

change mrb_int to size_t that would take strlen()

rescue StopIteration only.

Reduce implicit type casts.

mark root fiber object; close #1865

float + nil should be raise TypeError

calc hash value directly for strings, symbols and numbers

string length type to be mrb_int

symbol length type to be mrb_int

Hash#shift may return any entries

type of mrb_type() should be enum mrb_vtype when MRB_NAN_BOXING is on

optimize from each to enumerator_block_call

modify core method that return Enumerator object if not block given

make private method enumerator_block_call

remove new_label(s) where label position can be obtained from genop()

too much optimization

peephole optimization for OP_JMP{IF,NOT}

add including limits.h.

add mrb_strlen_lit which makes _lit macros safer

avoid mrb_string_value_cstr() to copy string between mrb_states in tests


remove deprecated register keyword

don’t use of anonymous unions

set bool macro

set bit field for mrb_bool

add comments at end of include guard

reduce mrb_open calls in mrbgem test

Use mrb_str_new_cstr() instead of mrb_str_new() with strlen().

use mrb_str_cat_lit for literals

MSVC: add NAN and INFINITY for older versions


add data_type check to mruby-random

add “?” specifier to check if preceding optional argument is given

Make type casts safer.

pool: use mrb_malloc_simple instead of mrb_malloc

support linenoise in mirb

convert too much from size_t to uint32_t; mrb_sym2name_len() takes size_t*

use sizeof(void*) instead of mrb_int size and extend embed string size

ignore *.pdb

reduce integer type complexity from int/size_t/uint32_t by unifying them to uint32_t; close #1778

make embed string when create literals

embed small string use flags 4 for *this object is embed* use flags 8~64 for *embed string length*

error.h: add extern “C” for C++

use mrb_int instead of size_t since string length is represented by mrb_int; close #1810

Change the position of -L option from MRUBY_LIBS to MRUBY_LDFLAGS

should check crossing C boudary from resume

add existing include/ directory only

mruby command should not execute program on “syntax only option(-c)”.

Use mrb_exc_new_str_lit widely

introduce mrb_exc_new_str_lit for C string literals

add new macros for MRB_STR_SHARED operations, based on 0f7aecf from @ksss; ref #1782

use tempfile module

Kernel#send does not use mrb_funcall anymore for most cases; ref #1680

rescue clause should understand splats; close #1786

Add ssh protocol support for bitbucket.

remove explicit use of g++

use shallow clone in git gem

use c++ compiler to link when c++ abi is enabled

allow command like “ccache gcc”

wrap function prototype by extern “C”

add const to char* to pacify warnings for string litral to char* conversion

clear exc_catched before jumping to L_RAISE

define mrbconfs on all compiler

define __STDC_* macros in too

wrap scope with do {} while()

revert wrong build_config.rb

use g++ to link

name c++ abi build

move jmpbuf_id to generated file

support c++ exception

exception in fiber should make resume to raise in parent fiber context; close #1765

need to initialize flags for pooled strings; close #1768

add _FLAG to SET_SHARED macros; ref #1750

remove unnecessary .gitkeep

Please add me to the author.

cancel 313f6b; add fallthrough comment

support break from fiber block; fix #1766

restore proc after restoring from fiber; ref #1766

swap actual and expected; ref #1764

remove break altogether in ci loop

make mrb_str_dump a bit faster

move check condition to outside in while block

use mrb_str_cat_lit() intead of mrb_str_cat

should not continue loop when ci = NULL

Could you add me to AUTHORS?

boot_defclass: super may be NULL

Delete `!!Notice!!` intro paragraph from README

avoid recursion when method_missing happened in inspect; fix #1746

add new function mrb_get_backtrace_at() to get backtrace at ci and pc


add macro ARY_SET_SHARED

use mrb_str_new_lit instead of mrb_str_new for C string literal

add macro ARY_SHARED_P

use mrb_intern_lit instead of mrb_intern_cstr for C string literals

use mrb_str_cat_lit() more widely

introduce mrb_str_cat_lit() to create strings from C string litrals

use mrb_str_new_lit instead of mrb_str_new for C string literals

Update; The URL of the mruby home-page is accessible.

small-optimization2 for mrb_time_zone

small-optimization for mrb_time_zone

clarify fallthrough in the switch statement

initialize sname before interning

add ruby and C code execution order note

avoid accessing uninitialized string; ref ac936fc

add MRB_ prefix to STRINGIZE macro

Issue minor corrections and updates to INSTALL file.

limit preserved significand length

move declaration to the top of the block; ref #1727

preserve significands in float-string conversion

powered num may be infinite in float-string conversion

use ‘d’ format spec to get Random object

add ‘d’ format specifier to get data pointer directly from mrb_get_args

mrb_flo_to_str: internal linkage

iv_size (non-seglist): return 0 if t is NULL

use double instead of mrb_float (that may be single precision float) to reduce errors

remove trailing zeros from float string representation

define FLO_EPSILON depends on float/double

remove max_digit from mrb_flo_to_str()

use powf() instead of pow() on MRB_USE_FLOAT

modify mrb_to_str() in order to display big float number

Give the type ‘void’ to functions have no argument.

clearn up warning in hash.c

MRUBY_VERSION should be only numbers separated by dot, like JRUBY_VERSION or Rubinius::VERSION

mrb_str_cat2: deprecated since 0cedf8f

remove mrb_str_literal declaration

dump.h: parenthesize negative errnos

remove direct inclusion of mruby/version.h from version.c; #1698

include mruby/version.h in mruby.h


add RUBY_ENGINE; ref #576

initialize ci->stackent at the top; #1691

Store raw stack address in callinfo instead of offset from stbas

forget to add function prototypes

rename mrb_name_class and make it static

Add download link for stable version to README

Remove notice of early version

add MRUBY_RELEASE info in numbers

forgot to add new files

move version info from gems to core; ref #576 #1684

use mrb_str_new_lit() more widely

introduce mrb_str_new_lit() to create strings from C string litrals

Add global constant MRUBY_COPYRIGHT

replace Kernel.show_version with MRUBY_DESCRIPTION

pass gem_flags_after_libraries

add RUBY_VERSION to notify syntax compatible version

better codedump format

fibers cannot cross C function boundary; close #1680

add missing declaration of mrb_str_format

clean up external symbols

mruby.h: remove mrb_str_format declaration

more accurate backtrace lineno

clone Class/Module rightly

add callback invocation from OP_DEBUG

describe call stack overwritten problem of mrb_get_backtrace; close #1661

hash value of enumerable should be obtained from its elements; close #1658

hash value of enumerable should be obtained from its elements; close #1658

adjust lineno after continuing script files using mrb_partial_hook; close #1652

string.c: remove str_mod_check

remove superfluous includes

skip “trace:” header if no backtrace line exists

adjust proc->target_class according to surrounding proc->target_class; based on a patch from @Fleurer; close #1627

need not to initialize ci->err at toplevel

avoid decrimenting eidx out of ecall()

execute ensure clause correctly without OP_EPOP

object_id may not return Fixnum (ISO says Integer), since intptr_t may be bigger than Fixnum, so type check for Numeric; ref #1630

should splat and iterate elements when “*ary” speficied in the case-when clause; close #1627

pop ensure stack before execution; close #1638

always clear ci->err

quicker release of arena after ensure calls

mrb_ary_splat() to call #to_a

use macros for assignments to ci->err

use the same error msg as mrb_str_to_cstr/CRuby

remove various preprocessor conditionals

tiny word boxing optimization

NaN boxing: use uintptr_t for bit manipulations

codegen.c: remove superfluous return

return value from #object_id may not be Fixnum; ref #1630

successful recursion check to be shallower; ref #1630

return-value of mrb_run is invalid in top-level-scope

use static symbols for debug filename info

avoid copying when the original string comes with MRB_STR_NOFREE

clear STR_NOFREE flag on modify

zero copy str_new from static allocate irep

zero copy intern from static allocate irep

rename mrb_intern_litral -> mrb_intern_static

class/module body to honor whether value is required or not; reduce a few instructions for normal cases

zero copy C literal strings in symbol table

remove MRB_IREP_ARRAY_INIT_SIZE which is no longer used

string type check based on #to_str to encourage duck typing; #1616

verify the argument of String#=~

Remove ‘mrb_state’ field from ‘kh_xxx_t’ structure.

change behavior of mrb_sym2str

remove unnecessary keep size adjustment in stack_extend_alloc(); close #1602

Change scapa and rcapa to size_t, use scapa.

add mrb_intern_lit for creating symbol from string literal

inline mrb_gc_arena_restore() and stack_extend() in VM loop

float objects in pool are objects when MRB_WORD_BOXING is set

move debug record size assertion to correct position

append defines instead of assigning

add CFLAGS as a fallback from CXXFLAGS; ref #1594

remove MRB_PARSER_BUF_SIZE configuration; close #1596

Modify referenced environment variables.

declare struct mrb_irep.

need to free pooled string bodies as well

mrb format should be portable among configurations (e.g. MRB_NAN_BOXING)

irep->pool struct pool -> mrb_value

parser_dump() is not used in mrbc; close #1561

codegen_malloc/realloc: static + simple mem alloc

write_debug_record should dump info recursively; close #1581

check upper callinfo to call ensure block; close #1579

should output debug info for child ireps; close #1575

enum mrb_vtype varies on compile time configuration, namely MRB_NAN_BOXING

remove warning on NAN_BOXING

remove unnecessary jump

Changed a variable declaration to top of block

Changed a variable declaration to top of block

load_exec() no longer return fixnum value for no_exec; should close #1569

fclose input file

call codedump_all() from mirb if –verbose is set; close #1559

check for corrupted mrb file data

protect returning irep (in proc) from GC

allow irep to be GCed

nextc(): always return an ‘\n’ at end of input

type check before pool scan

create Proc object before releasing memory pool

modified to use irep->reps to reference child ireps. preparation for removing irep array from mrb_state. note that instructions OP_LAMBDA, OP_EXEC and OP_EPUSH are incompatible, and dumped mrb format has changed.

mrbc: add line break for -c option

codedump() to take irep structure

change return value from mrb_generate_code()

changed argument type of mrb_ary_modify(); ref #1554

available also via rss