When generating instruction_implementations.cpp from instructions.def, every instructions are appended with the DISPATCH macro. Thus, it's not needed for goto instructions to explicitly call DISPATH.
Its only use was the compiler transform that dbussink just generalized.
This inserts a type check in the calling method so the check is much cheaper for the common case when we don't need to coerce the value.
Let Module#const_defined? check Object in 1.9 if search_parents is true
…ve got certain things in your hosts file
This reverts commit 9314bc3.
This makes them nicer to the JIT, which can now better inline the first step where just the type is checked. Since the common case is that we don't have to coerce, this makes it cheaper for those cases. The complete methods often use exceptions which makes it harder to inline. This improves performance, for example for Array#dup: Before === bin/rbx === dup strings 3492520.3 (±3.8%) i/s - 17446494 in 5.003134s (cycle=123734) dup numbers 3471273.3 (±4.4%) i/s - 17330250 in 5.003426s (cycle=165050) After === bin/rbx === dup strings 3664231.1 (±1.6%) i/s - 18353628 in 5.010230s (cycle=124011) dup numbers 3656536.5 (±3.9%) i/s - 18368316 in 5.032562s (cycle=173286) We probably still want to look into making the coercion checks cheaper, since they have quite an impact still.
Also shows we don't need separate Array#inspect methods for 1.8 and 1.9
Fix for Ruby 1.9 Hash#fetch to raise KeyError when no key exists
We need to be conservative here and raise an exception when we have \0 characters in the strings passed to methods such as Process#exec and IO.open.