[macruby-changes] [121] MacRuby/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Fri Mar 28 15:38:12 PDT 2008
Revision: 121
http://trac.macosforge.org/projects/ruby/changeset/121
Author: lsansonetti at apple.com
Date: 2008-03-28 15:38:12 -0700 (Fri, 28 Mar 2008)
Log Message:
-----------
fixing more regressions
Modified Paths:
--------------
MacRuby/trunk/array.c
MacRuby/trunk/class.c
MacRuby/trunk/ext/dbm/dbm.c
MacRuby/trunk/ext/dl/cfunc.c
MacRuby/trunk/ext/iconv/iconv.c
MacRuby/trunk/ext/json/ext/generator/generator.c
MacRuby/trunk/ext/openssl/ossl_ocsp.c
MacRuby/trunk/ext/openssl/ossl_ssl.c
MacRuby/trunk/ext/openssl/ossl_x509cert.c
MacRuby/trunk/ext/openssl/ossl_x509crl.c
MacRuby/trunk/ext/openssl/ossl_x509req.c
MacRuby/trunk/ext/openssl/ossl_x509revoked.c
MacRuby/trunk/ext/racc/cparse/cparse.c
MacRuby/trunk/ext/readline/readline.c
MacRuby/trunk/ext/sdbm/init.c
MacRuby/trunk/ext/socket/socket.c
MacRuby/trunk/ext/syck/rubyext.c
MacRuby/trunk/ext/tk/tcltklib.c
MacRuby/trunk/ext/tk/tkutil/tkutil.c
MacRuby/trunk/hash.c
MacRuby/trunk/object.c
MacRuby/trunk/proc.c
Modified: MacRuby/trunk/array.c
===================================================================
--- MacRuby/trunk/array.c 2008-03-26 22:51:38 UTC (rev 120)
+++ MacRuby/trunk/array.c 2008-03-28 22:38:12 UTC (rev 121)
@@ -44,6 +44,7 @@
struct rb_objc_ary_struct {
bool frozen;
bool named_args;
+ void *cptr;
};
/* This variable will always stay NULL, we only use its address. */
@@ -184,9 +185,10 @@
memset(&cb, 0, sizeof(CFArrayCallBacks));
cb.retain = rb_cfarray_retain_cb;
cb.release = rb_cfarray_release_cb;
+ cb.equal = rb_cfarray_equal_cb;
ary = (VALUE)CFArrayCreateMutable(NULL, 0, &cb);
- if (klass != 0)
+ if (klass != 0 && klass != rb_cArray && klass != rb_cArrayRuby)
*(Class *)ary = RCLASS_OCID(klass);
return ary;
@@ -227,7 +229,7 @@
rb_ary_new2(long len)
{
#if WITH_OBJC
- return ary_new(rb_cArrayRuby, len);
+ return ary_new(0, len);
#else
return ary_new(rb_cArray, len);
#endif
@@ -871,6 +873,8 @@
values = (const VALUE *)xmalloc(sizeof(VALUE) * len);
CFArrayGetValues((CFArrayRef)ary, CFRangeMake(0, len),
(const void **)values);
+ GC_WB(&rb_objc_ary_get_struct2(ary)->cptr, values);
+
return values;
#else
return RARRAY_PTR(ary);
@@ -2210,16 +2214,20 @@
n = RARRAY_LEN(ary);
for (i1 = i2 = 0; i1 < n; i1++) {
VALUE v = RARRAY_AT(ary, i1);
- if (RTEST(rb_yield(v))) continue;
#if WITH_OBJC
+ if (!RTEST(rb_yield(v))) {
+ i2++;
+ continue;
+ }
CFArrayRemoveValueAtIndex((CFMutableArrayRef)ary, i1);
i1--;
#else
+ if (RTEST(rb_yield(v))) continue;
if (i1 != i2) {
rb_ary_store(ary, i2, v);
}
+ i2++;
#endif
- i2++;
}
if (n == i2) return Qnil;
@@ -3099,8 +3107,8 @@
while ((idx = CFArrayGetFirstIndexOfValue((CFArrayRef)ary,
r, (const void *)e)) != -1) {
CFArrayRemoveValueAtIndex((CFMutableArrayRef)ary, idx);
- r.location = i;
- r.length = --n - i;
+ r.location = idx;
+ r.length = --n - idx;
}
}
#else
@@ -3840,6 +3848,16 @@
imp_rb_array_replaceObjectAtIndexWithObject);
INSTALL_METHOD("addObject:", imp_rb_array_addObject);
+ /* This is to work around a bug where CF will try to call an non-existing
+ * method.
+ */
+ if (true) {
+ Method m = class_getInstanceMethod(klass,
+ sel_registerName("_cfindexOfObject:range:"));
+ class_addMethod(klass, sel_registerName("_cfindexOfObject:inRange:"),
+ method_getImplementation(m), method_getTypeEncoding(m));
+ }
+
#undef INSTALL_METHOD
}
#endif
@@ -3856,8 +3874,10 @@
{
#if WITH_OBJC
rb_cArray = rb_objc_import_class((Class)objc_getClass("NSArray"));
- rb_const_set(rb_cObject, rb_intern("Array"),
- rb_objc_import_class((Class)objc_getClass("NSMutableArray")));
+ rb_cArrayRuby =
+ rb_objc_import_class((Class)objc_getClass("NSMutableArray"));
+ FL_UNSET(rb_cArrayRuby, RCLASS_OBJC_IMPORTED);
+ rb_const_set(rb_cObject, rb_intern("Array"), rb_cArrayRuby);
rb_define_method(rb_cArray, "freeze", rb_ary_freeze, 0);
#else
rb_cArray = rb_define_class("Array", rb_cObject);
Modified: MacRuby/trunk/class.c
===================================================================
--- MacRuby/trunk/class.c 2008-03-26 22:51:38 UTC (rev 120)
+++ MacRuby/trunk/class.c 2008-03-28 22:38:12 UTC (rev 121)
@@ -405,7 +405,15 @@
VALUE
rb_make_metaclass(VALUE obj, VALUE super)
{
- if (BUILTIN_TYPE(obj) == T_CLASS && FL_TEST(obj, FL_SINGLETON)) {
+ bool pure;
+
+#if WITH_OBJC
+ pure = rb_objc_is_non_native(obj);
+#else
+ pure = false;
+#endif
+
+ if (!pure && BUILTIN_TYPE(obj) == T_CLASS && FL_TEST(obj, FL_SINGLETON)) {
return RBASIC(obj)->klass = rb_cClass;
}
else {
@@ -413,7 +421,7 @@
VALUE klass;
#if WITH_OBJC
- if (BUILTIN_TYPE(obj) == T_CLASS) {
+ if (!pure && BUILTIN_TYPE(obj) == T_CLASS) {
NEWOBJ(obj2, struct RClass);
OBJSETUP(obj2, rb_cClass, T_CLASS);
klass = (VALUE)obj2;
@@ -423,18 +431,19 @@
RCLASS_SUPER(klass) = super;
RCLASS_M_TBL(klass) = st_init_numtable();
RCLASS(klass)->ocklass = RBASIC(super)->isa;
+ RBASIC(obj)->klass = klass;
}
else {
klass = rb_class_boot(super);
*(Class *)obj = RCLASS_OCID(klass);
- if (!rb_objc_is_non_native(obj))
+ if (!pure)
RBASIC(obj)->klass = klass;
}
#else
klass = rb_class_boot(super);
+ RBASIC(obj)->klass = klass;
#endif
FL_SET(klass, FL_SINGLETON);
- RBASIC(obj)->klass = klass;
rb_singleton_class_attached(klass, obj);
@@ -1079,8 +1088,19 @@
if (class_isMetaClass(ocklass))
return klass;
- if (!FL_TEST(klass, FL_SINGLETON))
+ if (!FL_TEST(klass, FL_SINGLETON)) {
klass = rb_make_metaclass(obj, klass);
+#if 0
+ Class newocklass;
+
+ newocklass = objc_allocateClassPair(ocklass, "MetaClassFoo", 0);
+ assert(newocklass != NULL);
+ objc_registerClassPair(newocklass);
+ rb_objc_install_array_primitives(newocklass);
+ *(Class *)obj = newocklass;
+ klass = rb_objc_import_class(newocklass);
+#endif
+ }
return klass;
}
#endif
Modified: MacRuby/trunk/ext/dbm/dbm.c
===================================================================
--- MacRuby/trunk/ext/dbm/dbm.c 2008-03-26 22:51:38 UTC (rev 120)
+++ MacRuby/trunk/ext/dbm/dbm.c 2008-03-28 22:38:12 UTC (rev 121)
@@ -345,7 +345,7 @@
}
for (i = 0; i < RARRAY_LEN(ary); i++) {
- keystr = RARRAY_PTR(ary)[i];
+ keystr = RARRAY_AT(ary, i);
StringValue(keystr);
key.dptr = RSTRING_PTR(keystr);
key.dsize = RSTRING_LEN(keystr);
@@ -407,7 +407,7 @@
if (RARRAY_LEN(pair) < 2) {
rb_raise(rb_eArgError, "pair must be [key, value]");
}
- fdbm_store(dbm, RARRAY_PTR(pair)[0], RARRAY_PTR(pair)[1]);
+ fdbm_store(dbm, RARRAY_AT(pair, 0), RARRAY_AT(pair, 1));
return Qnil;
}
Modified: MacRuby/trunk/ext/dl/cfunc.c
===================================================================
--- MacRuby/trunk/ext/dl/cfunc.c 2008-03-26 22:51:38 UTC (rev 120)
+++ MacRuby/trunk/ext/dl/cfunc.c 2008-03-28 22:38:12 UTC (rev 121)
@@ -260,7 +260,7 @@
if( i >= DLSTACK_SIZE ){
rb_raise(rb_eDLError, "too many arguments (stack overflow)");
}
- stack[i] = NUM2LONG(RARRAY_PTR(ary)[i]);
+ stack[i] = NUM2LONG(RARRAY_AT(ary, i));
}
/* calltype == CFUNC_CDECL */
Modified: MacRuby/trunk/ext/iconv/iconv.c
===================================================================
--- MacRuby/trunk/ext/iconv/iconv.c 2008-03-26 22:51:38 UTC (rev 120)
+++ MacRuby/trunk/ext/iconv/iconv.c 2008-03-28 22:38:12 UTC (rev 121)
@@ -144,9 +144,9 @@
if (RHASH_SIZE(charset_map)) {
VALUE key = rb_funcall2(val, rb_intern("downcase"), 0, 0);
StringValuePtr(key);
- if (st_lookup(RHASH_TBL(charset_map), key, &val)) {
+ val = rb_hash_aref(charset_map, key);
+ if (val != Qnil)
*code = val;
- }
}
return StringValuePtr(*code);
}
@@ -353,7 +353,7 @@
unsigned int i;
rescue = iconv_fail(error, Qnil, Qnil, env, 0);
if (TYPE(rescue) == T_ARRAY) {
- str = RARRAY_LEN(rescue) > 0 ? RARRAY_PTR(rescue)[0] : Qnil;
+ str = RARRAY_LEN(rescue) > 0 ? RARRAY_AT(rescue, 0) : Qnil;
}
if (FIXNUM_P(str) && (i = FIX2INT(str)) <= 0xff) {
char c = i;
@@ -446,8 +446,8 @@
rescue = iconv_fail(error, ret, str, env, errmsg);
if (TYPE(rescue) == T_ARRAY) {
if ((len = RARRAY_LEN(rescue)) > 0)
- rb_str_concat(ret, RARRAY_PTR(rescue)[0]);
- if (len > 1 && !NIL_P(str = RARRAY_PTR(rescue)[1])) {
+ rb_str_concat(ret, RARRAY_AT(rescue, 0));
+ if (len > 1 && !NIL_P(str = RARRAY_AT(rescue, 1))) {
StringValue(str);
inlen = length = RSTRING_LEN(str);
instart = inptr = RSTRING_PTR(str);
@@ -760,7 +760,7 @@
if (!rb_block_given_p())
return ary;
for (i = 0; i < RARRAY_LEN(ary); i++) {
- rb_yield(RARRAY_PTR(ary)[i]);
+ rb_yield(RARRAY_AT(ary, i));
}
#else
rb_notimplement();
Modified: MacRuby/trunk/ext/json/ext/generator/generator.c
===================================================================
--- MacRuby/trunk/ext/json/ext/generator/generator.c 2008-03-26 22:51:38 UTC (rev 120)
+++ MacRuby/trunk/ext/json/ext/generator/generator.c 2008-03-28 22:38:12 UTC (rev 121)
@@ -188,7 +188,7 @@
OBJ_INFECT(result, self);
rb_str_buf_append(result, state->array_nl);
for (i = 0; i < len; i++) {
- VALUE element = RARRAY_PTR(self)[i];
+ VALUE element = RARRAY_AT(self, i);
if (RTEST(rb_hash_aref(state->seen, rb_obj_id(element)))) {
rb_raise(eCircularDatastructure,
"circular data structures not supported!");
@@ -215,7 +215,7 @@
rb_str_buf_cat2(result, "[");
rb_str_buf_append(result, state->array_nl);
for (i = 0; i < len; i++) {
- VALUE element = RARRAY_PTR(self)[i];
+ VALUE element = RARRAY_AT(self, i);
OBJ_INFECT(result, element);
if (i > 0) rb_str_buf_append(result, delim);
rb_str_buf_append(result, shift);
@@ -251,7 +251,7 @@
rb_str_buf_cat2(result, "[");
OBJ_INFECT(result, self);
for (i = 0; i < len; i++) {
- VALUE element = RARRAY_PTR(self)[i];
+ VALUE element = RARRAY_AT(self, i);
OBJ_INFECT(result, element);
if (i > 0) rb_str_buf_cat2(result, ",");
element = rb_funcall(element, i_to_json, 0);
Modified: MacRuby/trunk/ext/openssl/ossl_ocsp.c
===================================================================
--- MacRuby/trunk/ext/openssl/ossl_ocsp.c 2008-03-26 22:51:38 UTC (rev 120)
+++ MacRuby/trunk/ext/openssl/ossl_ocsp.c 2008-03-28 22:38:12 UTC (rev 121)
@@ -462,7 +462,7 @@
/* All ary's members should be X509Extension */
Check_Type(ext, T_ARRAY);
for (i = 0; i < RARRAY_LEN(ext); i++)
- OSSL_Check_Kind(RARRAY_PTR(ext)[i], cX509Ext);
+ OSSL_Check_Kind(RARRAY_AT(ext, i), cX509Ext);
}
error = 0;
@@ -491,7 +491,7 @@
sk_X509_EXTENSION_pop_free(single->singleExtensions, X509_EXTENSION_free);
single->singleExtensions = NULL;
for(i = 0; i < RARRAY_LEN(ext); i++){
- x509ext = DupX509ExtPtr(RARRAY_PTR(ext)[i]);
+ x509ext = DupX509ExtPtr(RARRAY_AT(ext, i));
if(!OCSP_SINGLERESP_add_ext(single, x509ext, -1)){
X509_EXTENSION_free(x509ext);
error = 1;
Modified: MacRuby/trunk/ext/openssl/ossl_ssl.c
===================================================================
--- MacRuby/trunk/ext/openssl/ossl_ssl.c 2008-03-26 22:51:38 UTC (rev 120)
+++ MacRuby/trunk/ext/openssl/ossl_ssl.c 2008-03-28 22:38:12 UTC (rev 121)
@@ -511,7 +511,7 @@
if(!NIL_P(val)){
if(TYPE(val) == T_ARRAY){
for(i = 0; i < RARRAY_LEN(val); i++){
- client_ca = GetX509CertPtr(RARRAY_PTR(val)[i]);
+ client_ca = GetX509CertPtr(RARRAY_AT(val, i));
if (!SSL_CTX_add_client_CA(ctx, client_ca)){
/* Copies X509_NAME => FREE it. */
ossl_raise(eSSLError, "SSL_CTX_add_client_CA");
Modified: MacRuby/trunk/ext/openssl/ossl_x509cert.c
===================================================================
--- MacRuby/trunk/ext/openssl/ossl_x509cert.c 2008-03-26 22:51:38 UTC (rev 120)
+++ MacRuby/trunk/ext/openssl/ossl_x509cert.c 2008-03-28 22:38:12 UTC (rev 121)
@@ -647,13 +647,13 @@
Check_Type(ary, T_ARRAY);
/* All ary's members should be X509Extension */
for (i=0; i<RARRAY_LEN(ary); i++) {
- OSSL_Check_Kind(RARRAY_PTR(ary)[i], cX509Ext);
+ OSSL_Check_Kind(RARRAY_AT(ary, i), cX509Ext);
}
GetX509(self, x509);
sk_X509_EXTENSION_pop_free(x509->cert_info->extensions, X509_EXTENSION_free);
x509->cert_info->extensions = NULL;
for (i=0; i<RARRAY_LEN(ary); i++) {
- ext = DupX509ExtPtr(RARRAY_PTR(ary)[i]);
+ ext = DupX509ExtPtr(RARRAY_AT(ary, i));
if (!X509_add_ext(x509, ext, -1)) { /* DUPs ext - FREE it */
X509_EXTENSION_free(ext);
Modified: MacRuby/trunk/ext/openssl/ossl_x509crl.c
===================================================================
--- MacRuby/trunk/ext/openssl/ossl_x509crl.c 2008-03-26 22:51:38 UTC (rev 120)
+++ MacRuby/trunk/ext/openssl/ossl_x509crl.c 2008-03-28 22:38:12 UTC (rev 121)
@@ -288,13 +288,13 @@
Check_Type(ary, T_ARRAY);
/* All ary members should be X509 Revoked */
for (i=0; i<RARRAY_LEN(ary); i++) {
- OSSL_Check_Kind(RARRAY_PTR(ary)[i], cX509Rev);
+ OSSL_Check_Kind(RARRAY_AT(ary, i), cX509Rev);
}
GetX509CRL(self, crl);
sk_X509_REVOKED_pop_free(crl->crl->revoked, X509_REVOKED_free);
crl->crl->revoked = NULL;
for (i=0; i<RARRAY_LEN(ary); i++) {
- rev = DupX509RevokedPtr(RARRAY_PTR(ary)[i]);
+ rev = DupX509RevokedPtr(RARRAY_AT(ary, i));
if (!X509_CRL_add0_revoked(crl, rev)) { /* NO DUP - don't free! */
ossl_raise(eX509CRLError, NULL);
}
@@ -462,13 +462,13 @@
Check_Type(ary, T_ARRAY);
/* All ary members should be X509 Extensions */
for (i=0; i<RARRAY_LEN(ary); i++) {
- OSSL_Check_Kind(RARRAY_PTR(ary)[i], cX509Ext);
+ OSSL_Check_Kind(RARRAY_AT(ary, i), cX509Ext);
}
GetX509CRL(self, crl);
sk_X509_EXTENSION_pop_free(crl->crl->extensions, X509_EXTENSION_free);
crl->crl->extensions = NULL;
for (i=0; i<RARRAY_LEN(ary); i++) {
- ext = DupX509ExtPtr(RARRAY_PTR(ary)[i]);
+ ext = DupX509ExtPtr(RARRAY_AT(ary, i));
if(!X509_CRL_add_ext(crl, ext, -1)) { /* DUPs ext - FREE it */
X509_EXTENSION_free(ext);
ossl_raise(eX509CRLError, NULL);
Modified: MacRuby/trunk/ext/openssl/ossl_x509req.c
===================================================================
--- MacRuby/trunk/ext/openssl/ossl_x509req.c 2008-03-26 22:51:38 UTC (rev 120)
+++ MacRuby/trunk/ext/openssl/ossl_x509req.c 2008-03-28 22:38:12 UTC (rev 121)
@@ -404,13 +404,13 @@
Check_Type(ary, T_ARRAY);
for (i=0;i<RARRAY_LEN(ary); i++) {
- OSSL_Check_Kind(RARRAY_PTR(ary)[i], cX509Attr);
+ OSSL_Check_Kind(RARRAY_AT(ary, i), cX509Attr);
}
GetX509Req(self, req);
sk_X509_ATTRIBUTE_pop_free(req->req_info->attributes, X509_ATTRIBUTE_free);
req->req_info->attributes = NULL;
for (i=0;i<RARRAY_LEN(ary); i++) {
- item = RARRAY_PTR(ary)[i];
+ item = RARRAY_AT(ary, i);
attr = DupX509AttrPtr(item);
if (!X509_REQ_add1_attr(req, attr)) {
ossl_raise(eX509ReqError, NULL);
Modified: MacRuby/trunk/ext/openssl/ossl_x509revoked.c
===================================================================
--- MacRuby/trunk/ext/openssl/ossl_x509revoked.c 2008-03-26 22:51:38 UTC (rev 120)
+++ MacRuby/trunk/ext/openssl/ossl_x509revoked.c 2008-03-28 22:38:12 UTC (rev 121)
@@ -176,13 +176,13 @@
Check_Type(ary, T_ARRAY);
for (i=0; i<RARRAY_LEN(ary); i++) {
- OSSL_Check_Kind(RARRAY_PTR(ary)[i], cX509Ext);
+ OSSL_Check_Kind(RARRAY_AT(ary, i), cX509Ext);
}
GetX509Rev(self, rev);
sk_X509_EXTENSION_pop_free(rev->extensions, X509_EXTENSION_free);
rev->extensions = NULL;
for (i=0; i<RARRAY_LEN(ary); i++) {
- item = RARRAY_PTR(ary)[i];
+ item = RARRAY_AT(ary, i);
ext = DupX509ExtPtr(item);
if(!X509_REVOKED_add_ext(rev, ext, -1)) {
ossl_raise(eX509RevError, NULL);
Modified: MacRuby/trunk/ext/racc/cparse/cparse.c
===================================================================
--- MacRuby/trunk/ext/racc/cparse/cparse.c 2008-03-26 22:51:38 UTC (rev 120)
+++ MacRuby/trunk/ext/racc/cparse/cparse.c 2008-03-28 22:38:12 UTC (rev 121)
@@ -84,7 +84,7 @@
}
#define AREF(s, idx) \
- ((0 <= idx && idx < RARRAY_LEN(s)) ? RARRAY_PTR(s)[idx] : Qnil)
+ ((0 <= idx && idx < RARRAY_LEN(s)) ? RARRAY_AT(s, idx) : Qnil)
/* -----------------------------------------------------------------------
Parser Stack Interfaces
@@ -98,7 +98,7 @@
{
if (len < 0) return Qnil; /* system error */
if (len > RARRAY_LEN(stack)) len = RARRAY_LEN(stack);
- return rb_ary_new4(len, RARRAY_PTR(stack) + RARRAY_LEN(stack) - len);
+ return rb_ary_new4(len, RARRAY_AT(stack, RARRAY_LEN(stack) - len));
}
static void
@@ -115,7 +115,7 @@
#define PUSH(s, i) rb_ary_store(s, RARRAY_LEN(s), i)
#define POP(s) rb_ary_pop(s)
#define LAST_I(s) \
- ((RARRAY_LEN(s) > 0) ? RARRAY_PTR(s)[RARRAY_LEN(s) - 1] : Qnil)
+ ((RARRAY_LEN(s) > 0) ? RARRAY_AT(s, RARRAY_LEN(s) - 1) : Qnil)
#define GET_TAIL(s, len) get_stack_tail(s, len)
#define CUT_TAIL(s, len) cut_stack_tail(s, len)
@@ -327,21 +327,21 @@
Check_Type(arg, T_ARRAY);
if (!(13 <= RARRAY_LEN(arg) && RARRAY_LEN(arg) <= 14))
rb_raise(RaccBug, "[Racc Bug] wrong arg.size %ld", RARRAY_LEN(arg));
- v->action_table = assert_array (RARRAY_PTR(arg)[ 0]);
- v->action_check = assert_array (RARRAY_PTR(arg)[ 1]);
- v->action_default = assert_array (RARRAY_PTR(arg)[ 2]);
- v->action_pointer = assert_array (RARRAY_PTR(arg)[ 3]);
- v->goto_table = assert_array (RARRAY_PTR(arg)[ 4]);
- v->goto_check = assert_array (RARRAY_PTR(arg)[ 5]);
- v->goto_default = assert_array (RARRAY_PTR(arg)[ 6]);
- v->goto_pointer = assert_array (RARRAY_PTR(arg)[ 7]);
- v->nt_base = assert_integer(RARRAY_PTR(arg)[ 8]);
- v->reduce_table = assert_array (RARRAY_PTR(arg)[ 9]);
- v->token_table = assert_hash (RARRAY_PTR(arg)[10]);
- v->shift_n = assert_integer(RARRAY_PTR(arg)[11]);
- v->reduce_n = assert_integer(RARRAY_PTR(arg)[12]);
+ v->action_table = assert_array (RARRAY_AT(arg, 0));
+ v->action_check = assert_array (RARRAY_AT(arg, 1));
+ v->action_default = assert_array (RARRAY_AT(arg, 2));
+ v->action_pointer = assert_array (RARRAY_AT(arg, 3));
+ v->goto_table = assert_array (RARRAY_AT(arg, 4));
+ v->goto_check = assert_array (RARRAY_AT(arg, 5));
+ v->goto_default = assert_array (RARRAY_AT(arg, 6));
+ v->goto_pointer = assert_array (RARRAY_AT(arg, 7));
+ v->nt_base = assert_integer(RARRAY_AT(arg, 8));
+ v->reduce_table = assert_array (RARRAY_AT(arg, 9));
+ v->token_table = assert_hash (RARRAY_AT(arg,10));
+ v->shift_n = assert_integer(RARRAY_AT(arg,11));
+ v->reduce_n = assert_integer(RARRAY_AT(arg,12));
if (RARRAY_LEN(arg) > 13) {
- v->use_result_var = RTEST(RARRAY_PTR(arg)[13]);
+ v->use_result_var = RTEST(RARRAY_AT(arg, 13));
}
else {
v->use_result_var = Qtrue;
@@ -557,7 +557,7 @@
accept:
if (v->debug) rb_funcall(v->parser, id_d_accept, 0);
- v->retval = RARRAY_PTR(v->vstack)[0];
+ v->retval = RARRAY_AT(v->vstack, 0);
v->fin = CP_FIN_ACCEPT;
return;
@@ -686,9 +686,9 @@
VALUE goto_state;
Data_Get_Struct(data, struct cparse_params, v);
- reduce_len = RARRAY_PTR(v->reduce_table)[v->ruleno];
- reduce_to = RARRAY_PTR(v->reduce_table)[v->ruleno+1];
- method_id = RARRAY_PTR(v->reduce_table)[v->ruleno+2];
+ reduce_len = RARRAY_AT(v->reduce_table, v->ruleno);
+ reduce_to = RARRAY_AT(v->reduce_table, v->ruleno+1);
+ method_id = RARRAY_AT(v->reduce_table, v->ruleno+2);
len = NUM2LONG(reduce_len);
mid = value_to_id(method_id);
@@ -703,10 +703,10 @@
else {
if (mid != id_noreduce) {
tmp_v = GET_TAIL(v->vstack, len);
- tmp = RARRAY_PTR(tmp_v)[0];
+ tmp = RARRAY_AT(tmp_v, 0);
}
else {
- tmp = RARRAY_PTR(v->vstack)[ RARRAY_LEN(v->vstack) - len ];
+ tmp = RARRAY_AT(v->vstack, RARRAY_LEN(v->vstack) - len);
}
CUT_TAIL(v->vstack, len);
if (v->debug) {
Modified: MacRuby/trunk/ext/readline/readline.c
===================================================================
--- MacRuby/trunk/ext/readline/readline.c 2008-03-26 22:51:38 UTC (rev 120)
+++ MacRuby/trunk/ext/readline/readline.c 2008-03-28 22:38:12 UTC (rev 121)
@@ -188,7 +188,7 @@
return NULL;
result = ALLOC_N(char *, matches + 2);
for (i = 0; i < matches; i++) {
- temp = rb_obj_as_string(RARRAY_PTR(ary)[i]);
+ temp = rb_obj_as_string(RARRAY_AT(ary, i));
result[i + 1] = ALLOC_N(char, RSTRING_LEN(temp) + 1);
strcpy(result[i + 1], RSTRING_PTR(temp));
}
Modified: MacRuby/trunk/ext/sdbm/init.c
===================================================================
--- MacRuby/trunk/ext/sdbm/init.c 2008-03-26 22:51:38 UTC (rev 120)
+++ MacRuby/trunk/ext/sdbm/init.c 2008-03-28 22:38:12 UTC (rev 121)
@@ -323,7 +323,7 @@
}
for (i = 0; i < RARRAY_LEN(ary); i++) {
- keystr = RARRAY_PTR(ary)[i];
+ keystr = RARRAY_AT(ary, i);
StringValue(keystr);
key.dptr = RSTRING_PTR(keystr);
key.dsize = RSTRING_LEN(keystr);
@@ -418,7 +418,7 @@
if (RARRAY_LEN(pair) < 2) {
rb_raise(rb_eArgError, "pair must be [key, value]");
}
- fsdbm_store(dbm, RARRAY_PTR(pair)[0], RARRAY_PTR(pair)[1]);
+ fsdbm_store(dbm, RARRAY_AT(pair, 0), RARRAY_AT(pair, 1));
return Qnil;
}
Modified: MacRuby/trunk/ext/socket/socket.c
===================================================================
--- MacRuby/trunk/ext/socket/socket.c 2008-03-26 22:51:38 UTC (rev 120)
+++ MacRuby/trunk/ext/socket/socket.c 2008-03-28 22:38:12 UTC (rev 121)
@@ -3054,7 +3054,7 @@
for (res = res0; res; res = res->ai_next) {
ary = ipaddr(res->ai_addr, do_not_reverse_lookup);
if (res->ai_canonname) {
- RARRAY_PTR(ary)[2] = rb_str_new2(res->ai_canonname);
+ rb_ary_store(ary, 2, rb_str_new2(res->ai_canonname));
}
rb_ary_push(ary, INT2FIX(res->ai_family));
rb_ary_push(ary, INT2FIX(res->ai_socktype));
@@ -3296,16 +3296,16 @@
sa = tmp;
MEMZERO(&hints, struct addrinfo, 1);
if (RARRAY_LEN(sa) == 3) {
- af = RARRAY_PTR(sa)[0];
- port = RARRAY_PTR(sa)[1];
- host = RARRAY_PTR(sa)[2];
+ af = RARRAY_AT(sa, 0);
+ port = RARRAY_AT(sa, 1);
+ host = RARRAY_AT(sa, 2);
}
else if (RARRAY_LEN(sa) >= 4) {
- af = RARRAY_PTR(sa)[0];
- port = RARRAY_PTR(sa)[1];
- host = RARRAY_PTR(sa)[3];
+ af = RARRAY_AT(sa, 0);
+ port = RARRAY_AT(sa, 1);
+ host = RARRAY_AT(sa, 3);
if (NIL_P(host)) {
- host = RARRAY_PTR(sa)[2];
+ host = RARRAY_AT(sa, 2);
}
else {
/*
Modified: MacRuby/trunk/ext/syck/rubyext.c
===================================================================
--- MacRuby/trunk/ext/syck/rubyext.c 2008-03-26 22:51:38 UTC (rev 120)
+++ MacRuby/trunk/ext/syck/rubyext.c 2008-03-28 22:38:12 UTC (rev 121)
@@ -25,9 +25,9 @@
struct RClass klass;
/*struct RFloat flonum;*/
/*struct RString string;*/
- struct RArray array;
/*struct RRegexp regexp;*/
#if !WITH_OBJC
+ struct RArray array;
struct RHash hash;
#endif
/*struct RData data;*/
Modified: MacRuby/trunk/ext/tk/tcltklib.c
===================================================================
--- MacRuby/trunk/ext/tk/tcltklib.c 2008-03-26 22:51:38 UTC (rev 120)
+++ MacRuby/trunk/ext/tk/tcltklib.c 2008-03-28 22:38:12 UTC (rev 121)
@@ -1170,15 +1170,15 @@
case T_BIGNUM:
/* time is micro-second value */
divmod = rb_funcall(time, rb_intern("divmod"), 1, LONG2NUM(1000000));
- tcl_time.sec = NUM2LONG(RARRAY_PTR(divmod)[0]);
- tcl_time.usec = NUM2LONG(RARRAY_PTR(divmod)[1]);
+ tcl_time.sec = NUM2LONG(RARRAY_AT(divmod, 0));
+ tcl_time.usec = NUM2LONG(RARRAY_AT(divmod, 1));
break;
case T_FLOAT:
/* time is second value */
divmod = rb_funcall(time, rb_intern("divmod"), 1, INT2FIX(1));
- tcl_time.sec = NUM2LONG(RARRAY_PTR(divmod)[0]);
- tcl_time.usec = (long)(NUM2DBL(RARRAY_PTR(divmod)[1]) * 1000000);
+ tcl_time.sec = NUM2LONG(RARRAY_AT(divmod, 0));
+ tcl_time.usec = (long)(NUM2DBL(RARRAY_AT(divmod, 1)) * 1000000);
default:
{
@@ -5620,7 +5620,7 @@
}
/* set result */
- RARRAY_PTR(q->result)[0] = ret;
+ rb_ary_store(q->result, 0, ret);
/* complete */
*(q->done) = -1;
@@ -5745,7 +5745,7 @@
DUMP2("back from handler (current thread:%lx)", current);
/* get result & free allocated memory */
- ret = RARRAY_PTR(result)[0];
+ ret = RARRAY_AT(result, 0);
free(alloc_done);
if (argv) free(argv);
@@ -5979,7 +5979,7 @@
}
/* set result */
- RARRAY_PTR(q->result)[0] = ret;
+ rb_ary_store(q->result, 0, ret);
/* complete */
*(q->done) = -1;
@@ -6102,7 +6102,7 @@
DUMP2("back from handler (current thread:%lx)", current);
/* get result & free allocated memory */
- ret = RARRAY_PTR(result)[0];
+ ret = RARRAY_AT(result, 0);
free(alloc_done);
free(eval_str);
@@ -7093,7 +7093,7 @@
}
/* set result */
- RARRAY_PTR(q->result)[0] = ret;
+ rb_ary_store(q->result, 0, ret);
/* complete */
*(q->done) = -1;
@@ -7218,7 +7218,7 @@
DUMP2("back from handler (current thread:%lx)", current);
/* get result & free allocated memory */
- ret = RARRAY_PTR(result)[0];
+ ret = RARRAY_AT(result, 0);
//free(alloc_done);
ckfree((char*)alloc_done);
Modified: MacRuby/trunk/ext/tk/tkutil/tkutil.c
===================================================================
--- MacRuby/trunk/ext/tk/tkutil/tkutil.c 2008-03-26 22:51:38 UTC (rev 120)
+++ MacRuby/trunk/ext/tk/tkutil/tkutil.c 2008-03-28 22:38:12 UTC (rev 121)
@@ -268,8 +268,8 @@
/* size = RARRAY_LEN(ary); */
size = 0;
for(idx = 0; idx < RARRAY_LEN(ary); idx++) {
- if (TYPE(RARRAY_PTR(ary)[idx]) == T_HASH) {
- size += 2 * RHASH_SIZE(RARRAY_PTR(ary)[idx]);
+ if (TYPE(RARRAY_AT(ary, idx)) == T_HASH) {
+ size += 2 * RHASH_SIZE(RARRAY_AT(ary, idx));
} else {
size++;
}
@@ -277,7 +277,7 @@
dst = rb_ary_new2(size);
for(idx = 0; idx < RARRAY_LEN(ary); idx++) {
- val = RARRAY_PTR(ary)[idx];
+ val = RARRAY_AT(ary, idx);
str_val = Qnil;
switch(TYPE(val)) {
case T_ARRAY:
@@ -308,7 +308,7 @@
}
size2 = RARRAY_LEN(val);
for(idx2 = 0; idx2 < size2; idx2++) {
- val2 = RARRAY_PTR(val)[idx2];
+ val2 = RARRAY_AT(val, idx2);
switch(TYPE(val2)) {
case T_ARRAY:
str_val = ary2list(val2, enc_flag, self);
@@ -369,13 +369,13 @@
if (RTEST(dst_enc) && !NIL_P(sys_enc)) {
for(idx = 0; idx < RARRAY_LEN(dst); idx++) {
- str_val = RARRAY_PTR(dst)[idx];
+ str_val = RARRAY_AT(dst, idx);
if (rb_obj_respond_to(self, ID_toUTF8, Qtrue)) {
str_val = rb_funcall(self, ID_toUTF8, 1, str_val);
} else {
str_val = rb_funcall(cTclTkLib, ID_toUTF8, 1, str_val);
}
- RARRAY_PTR(dst)[idx] = str_val;
+ rb_ary_store(dst, idx, str_val);
}
val = rb_apply(cTclTkLib, ID_merge_tklist, dst);
if (TYPE(dst_enc) == T_STRING) {
@@ -421,7 +421,7 @@
size = RARRAY_LEN(ary);
dst = rb_ary_new2(size);
for(idx = 0; idx < RARRAY_LEN(ary); idx++) {
- val = RARRAY_PTR(ary)[idx];
+ val = RARRAY_AT(ary, idx);
str_val = Qnil;
switch(TYPE(val)) {
case T_ARRAY:
@@ -462,13 +462,13 @@
if (RTEST(dst_enc) && !NIL_P(sys_enc)) {
for(idx = 0; idx < RARRAY_LEN(dst); idx++) {
- str_val = RARRAY_PTR(dst)[idx];
+ str_val = RARRAY_AT(dst, idx);
if (rb_obj_respond_to(self, ID_toUTF8, Qtrue)) {
str_val = rb_funcall(self, ID_toUTF8, 1, str_val);
} else {
str_val = rb_funcall(cTclTkLib, ID_toUTF8, 1, str_val);
}
- RARRAY_PTR(dst)[idx] = str_val;
+ rb_ary_store(dst, idx, str_val);
}
val = rb_apply(cTclTkLib, ID_merge_tklist, dst);
if (TYPE(dst_enc) == T_STRING) {
@@ -504,27 +504,27 @@
len = RARRAY_LEN(assoc);
for(i = 0; i < len; i++) {
- pair = RARRAY_PTR(assoc)[i];
+ pair = RARRAY_AT(assoc, i);
if (TYPE(pair) != T_ARRAY) {
rb_ary_push(dst, key2keyname(pair));
continue;
}
switch(RARRAY_LEN(assoc)) {
case 2:
- rb_ary_push(dst, RARRAY_PTR(pair)[2]);
+ rb_ary_push(dst, RARRAY_AT(pair, 2));
case 1:
- rb_ary_push(dst, key2keyname(RARRAY_PTR(pair)[0]));
+ rb_ary_push(dst, key2keyname(RARRAY_AT(pair, 0)));
case 0:
continue;
default:
- rb_ary_push(dst, key2keyname(RARRAY_PTR(pair)[0]));
+ rb_ary_push(dst, key2keyname(RARRAY_AT(pair, 0)));
val = rb_ary_new2(RARRAY_LEN(pair) - 1);
for(j = 1; j < RARRAY_LEN(pair); j++) {
- rb_ary_push(val, RARRAY_PTR(pair)[j]);
+ rb_ary_push(val, RARRAY_AT(pair, j));
}
rb_ary_push(dst, val);
@@ -552,27 +552,27 @@
len = RARRAY_LEN(assoc);
for(i = 0; i < len; i++) {
- pair = RARRAY_PTR(assoc)[i];
+ pair = RARRAY_AT(assoc, i);
if (TYPE(pair) != T_ARRAY) {
rb_ary_push(dst, key2keyname(pair));
continue;
}
switch(RARRAY_LEN(assoc)) {
case 2:
- rb_ary_push(dst, get_eval_string_core(RARRAY_PTR(pair)[2], Qtrue, self));
+ rb_ary_push(dst, get_eval_string_core(RARRAY_AT(pair, 2), Qtrue, self));
case 1:
- rb_ary_push(dst, key2keyname(RARRAY_PTR(pair)[0]));
+ rb_ary_push(dst, key2keyname(RARRAY_AT(pair, 0)));
case 0:
continue;
default:
- rb_ary_push(dst, key2keyname(RARRAY_PTR(pair)[0]));
+ rb_ary_push(dst, key2keyname(RARRAY_AT(pair, 0)));
val = rb_ary_new2(RARRAY_LEN(pair) - 1);
for(j = 1; j < RARRAY_LEN(pair); j++) {
- rb_ary_push(val, RARRAY_PTR(pair)[j]);
+ rb_ary_push(val, RARRAY_AT(pair, j));
}
rb_ary_push(dst, get_eval_string_core(val, Qtrue, self));
@@ -594,7 +594,7 @@
{
volatile VALUE ary;
- ary = RARRAY_PTR(args)[0];
+ ary = RARRAY_AT(args, 0);
if (key == Qundef) return ST_CONTINUE;
#if 0
@@ -605,7 +605,7 @@
if (val == TK_None) return ST_CHECK;
- rb_ary_push(ary, get_eval_string_core(val, Qnil, RARRAY_PTR(args)[1]));
+ rb_ary_push(ary, get_eval_string_core(val, Qnil, RARRAY_AT(args, 1)));
return ST_CHECK;
}
@@ -636,21 +636,21 @@
{
volatile VALUE ary;
- ary = RARRAY_PTR(args)[0];
+ ary = RARRAY_AT(args, 0);
if (key == Qundef) return ST_CONTINUE;
#if 0
rb_ary_push(ary, key2keyname(key));
if (val != TK_None) {
rb_ary_push(ary, get_eval_string_core(val, Qtrue,
- RARRAY_PTR(args)[1]));
+ RARRAY_AT(args, 1)));
}
#endif
rb_ary_push(ary, key2keyname(key));
if (val == TK_None) return ST_CHECK;
- rb_ary_push(ary, get_eval_string_core(val, Qtrue, RARRAY_PTR(args)[1]));
+ rb_ary_push(ary, get_eval_string_core(val, Qtrue, RARRAY_AT(args, 1)));
return ST_CHECK;
}
@@ -1279,7 +1279,7 @@
buf = ALLOC_N(char, len + 1);
for(i = 0; i < len; i++) {
- ptr = RSTRING_PTR(RARRAY_PTR(list)[i]);
+ ptr = RSTRING_PTR(RARRAY_AT(list, i));
if (*ptr == '%' && *(ptr + 2) == '\0') {
*(buf + i) = *(ptr + 1);
} else {
@@ -1355,20 +1355,20 @@
* ivar ==> symbol
*/
for(idx = 0; idx < len; idx++) {
- inf = RARRAY_PTR(key_inf)[idx];
+ inf = RARRAY_AT(key_inf, idx);
if (TYPE(inf) != T_ARRAY) continue;
- *(key + real_len) = NUM2CHR(RARRAY_PTR(inf)[0]);
- *(type + real_len) = NUM2CHR(RARRAY_PTR(inf)[1]);
+ *(key + real_len) = NUM2CHR(RARRAY_AT(inf, 0));
+ *(type + real_len) = NUM2CHR(RARRAY_AT(inf, 1));
*(ivar + real_len)
= rb_intern(
RSTRING_PTR(
rb_str_cat2(rb_str_new2("@"),
- rb_id2name(SYM2ID(RARRAY_PTR(inf)[2])))
+ rb_id2name(SYM2ID(RARRAY_AT(inf, 2))))
)
);
- rb_attr(self, SYM2ID(RARRAY_PTR(inf)[2]), 1, 0, Qtrue);
+ rb_attr(self, SYM2ID(RARRAY_AT(inf, 2)), 1, 0, Qtrue);
real_len++;
}
*(key + real_len) = '\0';
@@ -1382,9 +1382,9 @@
*/
len = RARRAY_LEN(proc_inf);
for(idx = 0; idx < len; idx++) {
- inf = RARRAY_PTR(proc_inf)[idx];
+ inf = RARRAY_AT(proc_inf, idx);
if (TYPE(inf) != T_ARRAY) continue;
- rb_hash_aset(proc, RARRAY_PTR(inf)[0], RARRAY_PTR(inf)[1]);
+ rb_hash_aset(proc, RARRAY_AT(inf, 0), RARRAY_AT(inf, 1));
}
rb_const_set(self, ID_SUBST_INFO,
@@ -1441,9 +1441,9 @@
}
if (NIL_P(proc)) {
- rb_ary_push(dst, RARRAY_PTR(val_ary)[idx]);
+ rb_ary_push(dst, RARRAY_AT(val_ary, idx));
} else {
- rb_ary_push(dst, rb_funcall(proc, ID_call, 1, RARRAY_PTR(val_ary)[idx]));
+ rb_ary_push(dst, rb_funcall(proc, ID_call, 1, RARRAY_AT(val_ary, idx)));
}
}
Modified: MacRuby/trunk/hash.c
===================================================================
--- MacRuby/trunk/hash.c 2008-03-26 22:51:38 UTC (rev 120)
+++ MacRuby/trunk/hash.c 2008-03-28 22:38:12 UTC (rev 121)
@@ -344,7 +344,7 @@
values_cb.equal = rb_cfdictionary_equal_cb;
hash = (VALUE)CFDictionaryCreateMutable(NULL, 0, &keys_cb, &values_cb);
- if (klass != 0)
+ if (klass != 0 && klass != rb_cHash && klass != rb_cHashRuby)
*(Class *)hash = RCLASS_OCID(klass);
return hash;
@@ -362,7 +362,7 @@
rb_hash_new(void)
{
#if WITH_OBJC
- return hash_alloc(rb_cHashRuby);
+ return hash_alloc(0);
#else
return hash_alloc(rb_cHash);
#endif
@@ -3041,8 +3041,9 @@
#if WITH_OBJC
rb_cHash = rb_objc_import_class((Class)objc_getClass("NSDictionary"));
- rb_const_set(rb_cObject, rb_intern("Hash"),
- rb_objc_import_class((Class)objc_getClass("NSMutableDictionary")));
+ rb_cHashRuby = rb_objc_import_class((Class)objc_getClass("NSMutableDictionary"));
+ FL_UNSET(rb_cHashRuby, RCLASS_OBJC_IMPORTED);
+ rb_const_set(rb_cObject, rb_intern("Hash"), rb_cHashRuby);
rb_define_method(rb_cHash, "freeze", rb_hash_freeze, 0);
rb_define_method(rb_cHash, "frozen?", rb_hash_frozen, 0);
#else
Modified: MacRuby/trunk/object.c
===================================================================
--- MacRuby/trunk/object.c 2008-03-26 22:51:38 UTC (rev 120)
+++ MacRuby/trunk/object.c 2008-03-28 22:38:12 UTC (rev 121)
@@ -1405,9 +1405,11 @@
rb_raise(rb_eTypeError, "can't create instance of singleton class");
}
obj = rb_funcall(klass, ID_ALLOCATOR, 0, 0);
+#if !WITH_OBJC
if (rb_obj_class(obj) != rb_class_real(klass)) {
rb_raise(rb_eTypeError, "wrong instance allocation");
}
+#endif
return obj;
}
@@ -2321,6 +2323,15 @@
return obj;
}
+#if WITH_OBJC
+static VALUE
+rb_obj_is_pure(VALUE recv)
+{
+ return rb_objc_is_non_native(recv) ? Qtrue : Qfalse;
+}
+#endif
+
+
/*
* Document-class: Class
*
@@ -2479,6 +2490,10 @@
rb_define_method(rb_mKernel, "is_a?", rb_obj_is_kind_of, 1);
rb_define_method(rb_mKernel, "tap", rb_obj_tap, 0);
+#if WITH_OBJC
+ rb_define_method(rb_mKernel, "__pure__?", rb_obj_is_pure, 0);
+#endif
+
rb_define_global_function("sprintf", rb_f_sprintf, -1); /* in sprintf.c */
rb_define_global_function("format", rb_f_sprintf, -1); /* in sprintf.c */
Modified: MacRuby/trunk/proc.c
===================================================================
--- MacRuby/trunk/proc.c 2008-03-26 22:51:38 UTC (rev 120)
+++ MacRuby/trunk/proc.c 2008-03-28 22:38:12 UTC (rev 121)
@@ -1504,9 +1504,15 @@
{
volatile VALUE a;
+#if WITH_OBJC
+ if (TYPE(args) != T_ARRAY) {
+ return rb_method_call(1, &args, method);
+ }
+#else
if (CLASS_OF(args) != rb_cArray) {
args = rb_ary_new3(1, args);
}
+#endif
a = args;
return rb_method_call(RARRAY_LEN(a), RARRAY_PTR(a), method);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macruby-changes/attachments/20080328/9d94d6e1/attachment-0001.html
More information about the macruby-changes
mailing list