1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

merge revision(s) r45399,r45400,r46036,r46037: [Backport #416]

vm.c: merge code

	* vm.c (m_core_hash_from_ary, m_core_hash_merge_ary): merge
  duplicated code.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@46628 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nagachika 2014-06-30 18:02:23 +00:00
parent 370e83b789
commit 09cf452926
3 changed files with 72 additions and 21 deletions

View file

@ -214,4 +214,31 @@ class TestBacktrace < Test::Unit::TestCase
q << true
end
end
def test_core_backtrace_alias
obj = BasicObject.new
e = assert_raise(NameError) do
class << obj
alias foo bar
end
end
assert_not_match(/\Acore#/, e.backtrace_locations[0].base_label)
end
def test_core_backtrace_undef
obj = BasicObject.new
e = assert_raise(NameError) do
class << obj
undef foo
end
end
assert_not_match(/\Acore#/, e.backtrace_locations[0].base_label)
end
def test_core_backtrace_hash_merge
e = assert_raise(TypeError) do
{**nil}
end
assert_not_match(/\Acore#/, e.backtrace_locations[0].base_label)
end
end

View file

@ -1,10 +1,10 @@
#define RUBY_VERSION "2.1.2"
#define RUBY_RELEASE_DATE "2014-06-30"
#define RUBY_PATCHLEVEL 157
#define RUBY_RELEASE_DATE "2014-07-01"
#define RUBY_PATCHLEVEL 158
#define RUBY_RELEASE_YEAR 2014
#define RUBY_RELEASE_MONTH 6
#define RUBY_RELEASE_DAY 30
#define RUBY_RELEASE_MONTH 7
#define RUBY_RELEASE_DAY 1
#include "ruby/version.h"

58
vm.c
View file

@ -2262,46 +2262,62 @@ m_core_set_postexe(VALUE self)
return Qnil;
}
static VALUE core_hash_merge_ary(VALUE hash, VALUE ary);
static VALUE core_hash_from_ary(VALUE ary);
static VALUE core_hash_merge_kwd(int argc, VALUE *argv);
static VALUE
core_hash_merge(VALUE hash, long argc, const VALUE *argv)
{
long i;
assert(argc % 2 == 0);
for (i=0; i<argc; i+=2) {
rb_hash_aset(hash, argv[i], argv[i+1]);
}
return hash;
}
static VALUE
m_core_hash_from_ary(VALUE self, VALUE ary)
{
VALUE hash;
REWIND_CFP(hash = core_hash_from_ary(ary));
return hash;
}
static VALUE
core_hash_from_ary(VALUE ary)
{
VALUE hash = rb_hash_new();
int i;
if (RUBY_DTRACE_HASH_CREATE_ENABLED()) {
RUBY_DTRACE_HASH_CREATE(RARRAY_LEN(ary), rb_sourcefile(), rb_sourceline());
}
assert(RARRAY_LEN(ary) % 2 == 0);
for (i=0; i<RARRAY_LEN(ary); i+=2) {
rb_hash_aset(hash, RARRAY_AREF(ary, i), RARRAY_AREF(ary, i+1));
}
return hash;
return core_hash_merge_ary(hash, ary);
}
static VALUE
m_core_hash_merge_ary(VALUE self, VALUE hash, VALUE ary)
{
int i;
assert(RARRAY_LEN(ary) % 2 == 0);
for (i=0; i<RARRAY_LEN(ary); i+=2) {
rb_hash_aset(hash, RARRAY_AREF(ary, i), RARRAY_AREF(ary, i+1));
}
REWIND_CFP(core_hash_merge_ary(hash, ary));
return hash;
}
static VALUE
core_hash_merge_ary(VALUE hash, VALUE ary)
{
core_hash_merge(hash, RARRAY_LEN(ary), RARRAY_CONST_PTR(ary));
return hash;
}
static VALUE
m_core_hash_merge_ptr(int argc, VALUE *argv, VALUE recv)
{
int i;
VALUE hash = argv[0];
for (i=1; i<argc; i+=2) {
rb_hash_aset(hash, argv[i], argv[i+1]);
}
REWIND_CFP(core_hash_merge(hash, argc-1, argv+1));
return hash;
}
@ -2333,6 +2349,14 @@ kwcheck_i(VALUE key, VALUE value, VALUE hash)
static VALUE
m_core_hash_merge_kwd(int argc, VALUE *argv, VALUE recv)
{
VALUE hash;
REWIND_CFP(hash = core_hash_merge_kwd(argc, argv));
return hash;
}
static VALUE
core_hash_merge_kwd(int argc, VALUE *argv)
{
VALUE hash, kw;
rb_check_arity(argc, 1, 2);