Skip to content

Commit

Permalink
Merge branch 'master' of git://github.com/MacRuby/MacRuby
Browse files Browse the repository at this point in the history
  • Loading branch information
cyberfox committed Jun 20, 2011
2 parents 5837099 + 8b4d3bd commit ba59882
Show file tree
Hide file tree
Showing 1,423 changed files with 10,325 additions and 70,732 deletions.
52 changes: 0 additions & 52 deletions .cvsignore

This file was deleted.

1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -54,3 +54,4 @@ spec/ruby
test/test-mri/result
test/test-mri/test/csv/temp.gz
y.tab.c
test-mri/result
7 changes: 7 additions & 0 deletions HACKING.rdoc
Expand Up @@ -166,3 +166,10 @@ The following environment variables might help you debug easy bugs.

* To symbolize a Ruby address (named as ??) in the backtrace:
(gdb) p (void)rb_symbolicate(<address>)

* To print the addresses of all memory objects of a given minimum size (useful
when debugging memory leaks):
(gdb) p (void)rb_print_memory_objects(<size>)

* To print the GC references of a given memory object:
(gdb) info gc-references <address>
11 changes: 0 additions & 11 deletions NSArray.m
Expand Up @@ -50,16 +50,6 @@
return dup;
}

static id
nsary_clone(id rcv, SEL sel)
{
id clone = nsary_dup(rcv, 0);
if (OBJ_FROZEN(rcv)) {
OBJ_FREEZE(clone);
}
return clone;
}

static id
nsary_clear(id rcv, SEL sel)
{
Expand Down Expand Up @@ -1000,7 +990,6 @@
rb_include_module(rb_cArray, rb_mEnumerable);

rb_objc_define_method(rb_cArray, "dup", nsary_dup, 0);
rb_objc_define_method(rb_cArray, "clone", nsary_clone, 0);
rb_objc_define_method(rb_cArray, "clear", nsary_clear, 0);
rb_objc_define_method(rb_cArray, "to_s", nsary_inspect, 0);
rb_objc_define_method(rb_cArray, "inspect", nsary_inspect, 0);
Expand Down
11 changes: 0 additions & 11 deletions NSDictionary.m
Expand Up @@ -55,16 +55,6 @@
return dup;
}

static id
nshash_clone(id rcv, SEL sel)
{
id clone = nshash_dup(rcv, 0);
if (OBJ_FROZEN(rcv)) {
OBJ_FREEZE(clone);
}
return clone;
}

static id
nshash_rehash(id rcv, SEL sel)
{
Expand Down Expand Up @@ -475,7 +465,6 @@
rb_include_module(rb_cHash, rb_mEnumerable);

rb_objc_define_method(rb_cHash, "dup", nshash_dup, 0);
rb_objc_define_method(rb_cHash, "clone", nshash_clone, 0);
rb_objc_define_method(rb_cHash, "rehash", nshash_rehash, 0);
rb_objc_define_method(rb_cHash, "to_hash", nshash_to_hash, 0);
rb_objc_define_method(rb_cHash, "to_a", nshash_to_a, 0);
Expand Down
21 changes: 1 addition & 20 deletions NSString.m
Expand Up @@ -54,23 +54,13 @@
static id
nsstr_dup(id rcv, SEL sel)
{
id dup = [rcv mutableCopy];
id dup = (id)str_new_from_cfstring((CFStringRef)rcv);
if (OBJ_TAINTED(rcv)) {
OBJ_TAINT(dup);
}
return dup;
}

static id
nsstr_clone(id rcv, SEL sel)
{
id clone = nsstr_dup(rcv, 0);
if (OBJ_FROZEN(rcv)) {
OBJ_FREEZE(clone);
}
return clone;
}

static id
nsstr_to_s(id rcv, SEL sel)
{
Expand Down Expand Up @@ -180,14 +170,6 @@
return range.location == NSNotFound ? Qfalse : Qtrue;
}

static id
rstr_only(id rcv, SEL sel)
{
rb_raise(rb_eArgError, "method `%s' does not work on NSStrings",
sel_getName(sel));
return rcv; // never reached
}

static VALUE
nsstr_to_rstr(id nsstr)
{
Expand Down Expand Up @@ -294,7 +276,6 @@
assert(rb_cNSMutableString != 0);

rb_objc_define_method(rb_cString, "dup", nsstr_dup, 0);
rb_objc_define_method(rb_cString, "clone", nsstr_clone, 0);
rb_objc_define_method(rb_cString, "to_s", nsstr_to_s, 0);
rb_objc_define_method(rb_cString, "to_str", nsstr_to_s, 0);
rb_objc_define_method(rb_cString, "replace", nsstr_replace, 1);
Expand Down
121 changes: 74 additions & 47 deletions array.c
Expand Up @@ -37,9 +37,9 @@ rary_reserve(VALUE ary, size_t newlen)
else {
newlen -= rary->beg;
}
for (size_t i = 0; i < rary->len; i++) {
GC_WB(&rary->elements[i], rary->elements[rary->beg + i]);
}
GC_MEMMOVE(&rary->elements[0],
&rary->elements[rary->beg],
sizeof(VALUE) * rary->len);
rary->beg = 0;
}
if (newlen > rary->cap) {
Expand Down Expand Up @@ -78,9 +78,9 @@ rary_erase(VALUE ary, size_t idx, size_t len)
}
}
else {
for (size_t i = idx; i < RARY(ary)->len - len; i++) {
rary_elt_set(ary, i, rary_elt(ary, i + len));
}
GC_MEMMOVE(&RARY(ary)->elements[RARY(ary)->beg + idx],
&RARY(ary)->elements[RARY(ary)->beg + idx + len],
sizeof(VALUE) * (RARY(ary)->len - idx - len));
for (size_t i = 0; i < len; i++) {
rary_elt_set(ary, RARY(ary)->len - i - 1, Qnil);
}
Expand All @@ -106,10 +106,9 @@ rary_concat(VALUE ary, VALUE other, size_t beg, size_t len)
{
rary_reserve(ary, RARY(ary)->len + len);
if (IS_RARY(other)) {
for (size_t i = 0; i < len; i++) {
rary_elt_set(ary, i + RARY(ary)->len,
rary_elt(other, beg + i));
}
GC_MEMMOVE(&RARY(ary)->elements[RARY(ary)->beg + RARY(ary)->len],
&RARY(other)->elements[RARY(other)->beg + beg],
sizeof(VALUE) * len);
}
else {
for (size_t i = 0; i < len; i++) {
Expand Down Expand Up @@ -219,9 +218,10 @@ rb_ary_new4(long n, const VALUE *elts)
{
VALUE ary = rb_ary_new2(n);
if (n > 0 && elts != NULL) {
for (long i = 0; i < n; i++) {
rary_push(ary, elts[i]);
}
GC_MEMMOVE(rary_ptr(ary),
elts,
sizeof(VALUE) * n);
RARY(ary)->len = n;
}
return ary;
}
Expand Down Expand Up @@ -330,6 +330,7 @@ rary_initialize(VALUE ary, SEL sel, int argc, VALUE *argv)

const long len = NUM2LONG(size);
assert_ary_len(len);
rary_resize(ary, len);
if (rb_block_given_p()) {
if (argc == 2) {
rb_warn("block supersedes default value argument");
Expand All @@ -344,7 +345,6 @@ rary_initialize(VALUE ary, SEL sel, int argc, VALUE *argv)
}
}
else {
rary_resize(ary, len);
for (long i = 0; i < len; i++) {
rary_store(ary, i, val);
}
Expand Down Expand Up @@ -390,9 +390,9 @@ rary_insert(VALUE ary, long idx, VALUE val)
}
else if (idx < RARY(ary)->len) {
rary_reserve(ary, RARY(ary)->len + 1);
for (size_t i = RARY(ary)->len; i > idx; i--) {
rary_elt_set(ary, i, rary_elt(ary, i - 1));
}
GC_MEMMOVE(&RARY(ary)->elements[RARY(ary)->beg + idx + 1],
&RARY(ary)->elements[RARY(ary)->beg + idx],
sizeof(VALUE) * (RARY(ary)->len - idx));
rary_elt_set(ary, idx, val);
RARY(ary)->len++;
}
Expand Down Expand Up @@ -422,10 +422,11 @@ ary_shared_first(int argc, VALUE *argv, VALUE ary, bool last, bool remove)
}

VALUE result = rb_ary_new();
for (long i = 0; i < n; i++) {
VALUE item = rary_elt(ary, i + offset);
rary_push(result, item);
}
rary_reserve(result, n);
GC_MEMMOVE(rary_ptr(result),
&RARY(ary)->elements[RARY(ary)->beg + offset],
sizeof(VALUE) * n);
RARY(result)->len = n;
if (remove) {
for (long i = 0; i < n; i++) {
rary_erase(ary, offset, 1);
Expand Down Expand Up @@ -941,14 +942,36 @@ rary_splice(VALUE ary, long beg, long len, VALUE rpl)
}
}
else if (len == rlen) {
for (long i = 0; i < len; i++) {
rary_elt_set(ary, beg + i, rb_ary_elt(rpl, i));
}
if (rlen > 0 && IS_RARY(rpl)) {
GC_MEMMOVE(&RARY(ary)->elements[RARY(ary)->beg + beg],
&RARY(rpl)->elements[RARY(rpl)->beg],
sizeof(VALUE) * len);
}
else {
for (long i = 0; i < len; i++) {
rary_elt_set(ary, beg + i, rb_ary_elt(rpl, i));
}
}
}
else {
rary_erase(ary, beg, len);
for (long i = 0; i < rlen; i++) {
rary_insert(ary, beg + i, rb_ary_elt(rpl, i));
if (rlen > 0 && IS_RARY(rpl)) {
long newlen = RARY(ary)->len + rlen - len;

rary_reserve(ary, newlen);
GC_MEMMOVE(&RARY(ary)->elements[RARY(ary)->beg + beg + rlen],
&RARY(ary)->elements[RARY(ary)->beg + beg + len],
sizeof(VALUE) * (RARY(ary)->len - (beg + len)));

GC_MEMMOVE(&RARY(ary)->elements[RARY(ary)->beg + beg],
rary_ptr(rpl),
sizeof(VALUE) * rlen);
RARY(ary)->len = newlen;
}
else {
rary_erase(ary, beg, len);
for (long i = 0; i < rlen; i++) {
rary_insert(ary, beg + i, rb_ary_elt(rpl, i));
}
}
}
}
Expand Down Expand Up @@ -1191,23 +1214,6 @@ rary_dup(VALUE ary, SEL sel)
return dup;
}

static VALUE
rary_clone(VALUE ary, SEL sel)
{
VALUE clone = rary_copy(ary, CLASS_OF(ary));

if (OBJ_TAINTED(ary)) {
OBJ_TAINT(clone);
}
if (OBJ_UNTRUSTED(ary)) {
OBJ_UNTRUST(clone);
}
if (OBJ_FROZEN(ary)) {
OBJ_FREEZE(clone);
}
return clone;
}

/*
* call-seq:
* array.join(sep=$,) -> str
Expand Down Expand Up @@ -2184,8 +2190,10 @@ rary_replace(VALUE rcv, SEL sel, VALUE other)
{
rary_modify(rcv);
other = to_ary(other);
rary_remove_all(RARY(rcv));
rary_concat(rcv, other, 0, RARRAY_LEN(other));
if (rcv != other) {
rary_remove_all(RARY(rcv));
rary_concat(rcv, other, 0, RARRAY_LEN(other));
}
return rcv;
}

Expand Down Expand Up @@ -3665,6 +3673,26 @@ imp_rary_objectAtIndex(void *rcv, SEL sel, CFIndex idx)
return RB2OC(rary_elt((VALUE)rcv, idx));
}

/*
* call-seq:
* Array(arg) => array
*
* Returns <i>arg</i> as an <code>Array</code>. First tries to call
* <i>arg</i><code>.to_ary</code>, then <i>arg</i><code>.to_a</code>.
*
* Array(1..5) #=> [1, 2, 3, 4, 5]
*/

VALUE
rb_f_array(VALUE obj, SEL sel, VALUE arg)
{
VALUE ary = rb_Array(arg);
if (!IS_RARY(ary)) {
ary = rary_copy(ary, rb_cRubyArray);
}
return ary;
}

static void
imp_rary_insertObjectAtIndex(void *rcv, SEL sel, void *obj, CFIndex idx)
{
Expand Down Expand Up @@ -3736,7 +3764,6 @@ Init_Array(void)
rb_objc_define_method(rb_cRubyArray, "initialize_copy", rary_replace, 1);
rb_objc_define_method(rb_cRubyArray, "to_a", rary_to_a, 0);
rb_objc_define_method(rb_cRubyArray, "dup", rary_dup, 0);
rb_objc_define_method(rb_cRubyArray, "clone", rary_clone, 0);
rb_objc_define_method(rb_cRubyArray, "to_s", rary_inspect, 0);
rb_objc_define_method(rb_cRubyArray, "inspect", rary_inspect, 0);
rb_objc_define_method(rb_cRubyArray, "==", rary_equal, 1);
Expand Down
1 change: 1 addition & 0 deletions array.h
Expand Up @@ -185,6 +185,7 @@ VALUE rary_and(VALUE ary1, SEL sel, VALUE ary2);
VALUE rary_or(VALUE ary1, SEL sel, VALUE ary2);

unsigned long rb_ary_hash(VALUE ary);
VALUE rb_f_array(VALUE, SEL, VALUE);

#if defined(__cplusplus)
} // extern "C"
Expand Down

0 comments on commit ba59882

Please sign in to comment.