[macruby-changes] [386] MacRuby/branches/lrz_unstable
source_changes at macosforge.org
source_changes at macosforge.org
Wed Jul 30 13:40:50 PDT 2008
Revision: 386
http://trac.macosforge.org/projects/ruby/changeset/386
Author: lsansonetti at apple.com
Date: 2008-07-30 13:40:50 -0700 (Wed, 30 Jul 2008)
Log Message:
-----------
wip
Modified Paths:
--------------
MacRuby/branches/lrz_unstable/class.c
MacRuby/branches/lrz_unstable/gc.c
MacRuby/branches/lrz_unstable/include/ruby/ruby.h
MacRuby/branches/lrz_unstable/variable.c
Modified: MacRuby/branches/lrz_unstable/class.c
===================================================================
--- MacRuby/branches/lrz_unstable/class.c 2008-07-30 07:47:29 UTC (rev 385)
+++ MacRuby/branches/lrz_unstable/class.c 2008-07-30 20:40:50 UTC (rev 386)
@@ -402,19 +402,11 @@
VALUE
rb_make_metaclass(VALUE obj, VALUE super)
{
- bool pure;
-
#if WITH_OBJC
- pure = NATIVE(obj);
+ if (TYPE(obj) == T_CLASS && RCLASS_SINGLETON(obj)) {
#else
- pure = false;
+ if (BUILTIN_TYPE(obj) == T_CLASS && FL_TEST(obj, FL_SINGLETON)) {
#endif
-
-#if WITH_OBJC
- if (!pure && TYPE(obj) == T_CLASS && RCLASS_SINGLETON(obj)) {
-#else
- if (!pure && BUILTIN_TYPE(obj) == T_CLASS && FL_TEST(obj, FL_SINGLETON)) {
-#endif
RBASIC(obj)->klass = rb_cClass;
return rb_cClass;
}
Modified: MacRuby/branches/lrz_unstable/gc.c
===================================================================
--- MacRuby/branches/lrz_unstable/gc.c 2008-07-30 07:47:29 UTC (rev 385)
+++ MacRuby/branches/lrz_unstable/gc.c 2008-07-30 20:40:50 UTC (rev 386)
@@ -2300,21 +2300,18 @@
continue;
}
}
- if (!NATIVE((VALUE)r->address)) {
- switch (BUILTIN_TYPE(r->address)) {
- case T_NONE:
- case T_ICLASS:
- case T_NODE:
+ switch (BUILTIN_TYPE(r->address)) {
+ case T_NONE:
+ case T_ICLASS:
+ case T_NODE:
+ continue;
+ case T_CLASS:
+ if (RCLASS_SINGLETON(r->address))
continue;
- case T_CLASS:
- if (RCLASS_SINGLETON(r->address))
- continue;
- }
+ case T_NATIVE:
+ if (rb_objc_is_placeholder((void *)r->address))
+ continue;
}
- else {
- if (rb_objc_is_placeholder((void *)r->address))
- continue;
- }
rb_yield((VALUE)r->address);
ctx->count++;
}
Modified: MacRuby/branches/lrz_unstable/include/ruby/ruby.h
===================================================================
--- MacRuby/branches/lrz_unstable/include/ruby/ruby.h 2008-07-30 07:47:29 UTC (rev 385)
+++ MacRuby/branches/lrz_unstable/include/ruby/ruby.h 2008-07-30 20:40:50 UTC (rev 386)
@@ -283,6 +283,9 @@
RUBY_T_FALSE = 0x13,
RUBY_T_SYMBOL = 0x14,
RUBY_T_FIXNUM = 0x15,
+#if WITH_OBJC
+ RUBY_T_NATIVE = 0x16,
+#endif
RUBY_T_UNDEF = 0x1b,
RUBY_T_NODE = 0x1c,
@@ -306,6 +309,9 @@
#define T_BIGNUM RUBY_T_BIGNUM
#define T_FILE RUBY_T_FILE
#define T_FIXNUM RUBY_T_FIXNUM
+#if WITH_OBJC
+# define T_NATIVE RUBY_T_NATIVE
+#endif
#define T_TRUE RUBY_T_TRUE
#define T_FALSE RUBY_T_FALSE
#define T_DATA RUBY_T_DATA
@@ -498,7 +504,7 @@
# define _RCLASS_INFO(m) (*(long *)((void *)m + (sizeof(void *) * 4)))
# define RCLASS_SINGLETON(m) (_RCLASS_INFO(m) & CLS_META)
# endif
-# define NATIVE(obj) (*(Class *)obj != NULL && (RCLASS_VERSION(*(Class *)obj) & RCLASS_IS_OBJECT_SUBCLASS) != RCLASS_IS_OBJECT_SUBCLASS)
+# define NATIVE(obj) (*(Class *)obj != NULL && *(Class *)obj != (Class)rb_cBignum && (RCLASS_VERSION(*(Class *)obj) & RCLASS_IS_OBJECT_SUBCLASS) != RCLASS_IS_OBJECT_SUBCLASS)
# define RCLASS_RUBY(m) ((RCLASS_VERSION(m) & RCLASS_IS_RUBY_CLASS) == RCLASS_IS_RUBY_CLASS)
# define RCLASS_MODULE(m) ((RCLASS_VERSION(m) & RCLASS_IS_MODULE) == RCLASS_IS_MODULE)
CFMutableDictionaryRef rb_class_ivar_dict(VALUE);
@@ -1076,6 +1082,7 @@
if (*(Class *)obj == (Class)rb_cCFString) return T_STRING;
if (*(Class *)obj == (Class)rb_cCFArray) return T_ARRAY;
if (*(Class *)obj == (Class)rb_cCFHash) return T_HASH;
+ if (NATIVE(obj)) return T_NATIVE;
}
#endif
return BUILTIN_TYPE(obj);
Modified: MacRuby/branches/lrz_unstable/variable.c
===================================================================
--- MacRuby/branches/lrz_unstable/variable.c 2008-07-30 07:47:29 UTC (rev 385)
+++ MacRuby/branches/lrz_unstable/variable.c 2008-07-30 20:40:50 UTC (rev 386)
@@ -15,6 +15,7 @@
#include "ruby/node.h"
#include "ruby/st.h"
#include "ruby/util.h"
+#include "debug.h"
void rb_vm_change_state(void);
st_table *rb_global_tbl;
@@ -1209,11 +1210,6 @@
st_data_t index;
#endif
-#if WITH_OBJC
- if (!rb_special_const_p(obj) && NATIVE(obj))
- return generic_ivar_get(obj, id, warn);
-#endif
-
switch (TYPE(obj)) {
case T_OBJECT:
#if WITH_OBJC
@@ -1266,6 +1262,10 @@
return val;
#endif
break;
+#if WITH_OBJC
+ case T_NATIVE:
+ return generic_ivar_get(obj, id, warn);
+#endif
default:
if (FL_TEST(obj, FL_EXIVAR) || rb_special_const_p(obj))
return generic_ivar_get(obj, id, warn);
@@ -1302,13 +1302,6 @@
if (!OBJ_TAINTED(obj) && rb_safe_level() >= 4)
rb_raise(rb_eSecurityError, "Insecure: can't modify instance variable");
if (OBJ_FROZEN(obj)) rb_error_frozen("object");
-#if WITH_OBJC
- if (!rb_special_const_p(obj) && NATIVE(obj)) {
- rb_objc_flag_set((const void *)obj, FL_EXIVAR, true);
- generic_ivar_set(obj, id, val);
- return val;
- }
-#endif
switch (TYPE(obj)) {
case T_OBJECT:
#if WITH_OBJC
@@ -1449,6 +1442,12 @@
st_insert(RCLASS_IV_TBL(obj), id, val);
break;
#endif
+#if WITH_OBJC
+ case T_NATIVE:
+ rb_objc_flag_set((const void *)obj, FL_EXIVAR, true);
+ generic_ivar_set(obj, id, val);
+ break;
+#endif
default:
generic_ivar_set(obj, id, val);
FL_SET(obj, FL_EXIVAR);
@@ -1466,11 +1465,6 @@
st_data_t index;
#endif
-#if WITH_OBJC
- if (!rb_special_const_p(obj) && NATIVE(obj)) {
- return generic_ivar_defined(obj, id);
- }
-#endif
switch (TYPE(obj)) {
case T_OBJECT:
#if WITH_OBJC
@@ -1519,6 +1513,10 @@
return Qtrue;
break;
#endif
+#if WITH_OBJC
+ case T_NATIVE:
+ return generic_ivar_defined(obj, id);
+#endif
default:
if (FL_TEST(obj, FL_EXIVAR) || rb_special_const_p(obj))
return generic_ivar_defined(obj, id);
@@ -1566,10 +1564,6 @@
void rb_ivar_foreach(VALUE obj, int (*func)(ANYARGS), st_data_t arg)
{
-#if WITH_OBJC
- if (!rb_special_const_p(obj) && NATIVE(obj))
- goto generic;
-#endif
switch (TYPE(obj)) {
case T_OBJECT:
#if WITH_OBJC
@@ -1609,6 +1603,10 @@
}
#endif
return;
+#if WITH_OBJC
+ case T_NATIVE:
+ goto generic;
+#endif
}
if (!FL_TEST(obj, FL_EXIVAR) && !rb_special_const_p(obj))
return;
@@ -2323,6 +2321,7 @@
rb_vm_change_state();
}
#if WITH_OBJC
+ DLOG("CONS", "%s::%s <- %p", class_getName((Class)klass), rb_id2name(id), (void *)val);
CFDictionarySetValue(iv_dict, (const void *)id, (const void *)val);
#else
st_insert(RCLASS_IV_TBL(klass), id, val);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macruby-changes/attachments/20080730/9969bcda/attachment.html
More information about the macruby-changes
mailing list