[macruby-changes] [435] MacRuby/branches/lrz_unstable/objc.m

source_changes at macosforge.org source_changes at macosforge.org
Wed Aug 13 16:13:19 PDT 2008


Revision: 435
          http://trac.macosforge.org/projects/ruby/changeset/435
Author:   lsansonetti at apple.com
Date:     2008-08-13 16:13:19 -0700 (Wed, 13 Aug 2008)
Log Message:
-----------
faster BS constant loading

Modified Paths:
--------------
    MacRuby/branches/lrz_unstable/objc.m

Modified: MacRuby/branches/lrz_unstable/objc.m
===================================================================
--- MacRuby/branches/lrz_unstable/objc.m	2008-08-13 22:31:54 UTC (rev 434)
+++ MacRuby/branches/lrz_unstable/objc.m	2008-08-13 23:13:19 UTC (rev 435)
@@ -2067,16 +2067,23 @@
 bs_parse_cb(const char *path, bs_element_type_t type, void *value, void *ctx)
 {
     bool do_not_free = false;
+    CFMutableDictionaryRef rb_cObject_dict;
+
+    rb_cObject_dict = rb_class_ivar_dict(rb_cObject);
+    assert(rb_cObject_dict != NULL);
+
     switch (type) {
 	case BS_ELEMENT_ENUM:
 	{
 	    bs_element_enum_t *bs_enum = (bs_element_enum_t *)value;
 	    ID name = generate_const_name(bs_enum->name);
-	    if (!rb_const_defined(rb_cObject, name)) {
+	    if (!CFDictionaryGetValueIfPresent(
+		(CFDictionaryRef)rb_cObject_dict, (const void *)name, NULL)) {
 		VALUE val = strchr(bs_enum->value, '.') != NULL
 		    ? rb_float_new(rb_cstr_to_dbl(bs_enum->value, 1))
 		    : rb_cstr_to_inum(bs_enum->value, 10, 1);
-		rb_const_set(rb_cObject, name, val); 
+		CFDictionarySetValue(rb_cObject_dict, (const void *)name, 
+			(const void *)val);
 	    }
 	    else {
 		rb_warning("bs: enum `%s' already defined", rb_id2name(name));
@@ -2088,9 +2095,11 @@
 	{
 	    bs_element_constant_t *bs_const = (bs_element_constant_t *)value;
 	    ID name = generate_const_name(bs_const->name);
-	    if (!rb_const_defined(rb_cObject, name)) {	
+	    if (!CFDictionaryGetValueIfPresent(
+		(CFDictionaryRef)rb_cObject_dict, (const void *)name, NULL)) {
 		st_insert(bs_constants, (st_data_t)name, (st_data_t)bs_const);
-		rb_const_set(rb_cObject, name, bs_const_magic_cookie); 
+		CFDictionarySetValue(rb_cObject_dict, (const void *)name, 
+			(const void *)bs_const_magic_cookie);
 		do_not_free = true;
 	    }
 	    else {
@@ -2105,7 +2114,8 @@
 	    bs_element_string_constant_t *bs_strconst = 
 		(bs_element_string_constant_t *)value;
 	    ID name = generate_const_name(bs_strconst->name);
-	    if (!rb_const_defined(rb_cObject, name)) {	
+	    if (!CFDictionaryGetValueIfPresent(
+		(CFDictionaryRef)rb_cObject_dict, (const void *)name, NULL)) {
 		VALUE val;
 	    	if (bs_strconst->nsstring) {
 		    CFStringRef string;
@@ -2116,7 +2126,8 @@
 	    	else {
 		    val = rb_str_new2(bs_strconst->value);
 	    	}
-		rb_const_set(rb_cObject, name, val);
+		CFDictionarySetValue(rb_cObject_dict, (const void *)name, 
+			(const void *)val);
 	    }
 	    else {
 		rb_warning("bs: string constant `%s' already defined", 
@@ -2144,11 +2155,17 @@
 	    bs_element_function_alias_t *bs_func_alias = 
 		(bs_element_function_alias_t *)value;
 	    bs_element_function_t *bs_func_original;
-	    if (st_lookup(bs_functions, (st_data_t)rb_intern(bs_func_alias->original), (st_data_t *)&bs_func_original)) {
-		st_insert(bs_functions, (st_data_t)rb_intern(bs_func_alias->name), (st_data_t)bs_func_original);
+	    if (st_lookup(bs_functions, 
+		(st_data_t)rb_intern(bs_func_alias->original), 
+		(st_data_t *)&bs_func_original)) {
+		st_insert(bs_functions, 
+			(st_data_t)rb_intern(bs_func_alias->name), 
+			(st_data_t)bs_func_original);
 	    }
 	    else {
-		rb_raise(rb_eRuntimeError, "cannot alias '%s' to '%s' because it doesn't exist", bs_func_alias->name, bs_func_alias->original);
+		rb_raise(rb_eRuntimeError, 
+			"cannot alias '%s' to '%s' because it doesn't exist", 
+			bs_func_alias->name, bs_func_alias->original);
 	    }
 	    break;
 	}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macruby-changes/attachments/20080813/b3f5d34f/attachment.html 


More information about the macruby-changes mailing list