[macruby-changes] [965] MacRuby/branches/experimental

source_changes at macosforge.org source_changes at macosforge.org
Tue Mar 17 16:18:19 PDT 2009


Revision: 965
          http://trac.macosforge.org/projects/ruby/changeset/965
Author:   lsansonetti at apple.com
Date:     2009-03-17 16:18:19 -0700 (Tue, 17 Mar 2009)
Log Message:
-----------
implemented dynamic symbols

Modified Paths:
--------------
    MacRuby/branches/experimental/roxor.cpp
    MacRuby/branches/experimental/string.c

Modified: MacRuby/branches/experimental/roxor.cpp
===================================================================
--- MacRuby/branches/experimental/roxor.cpp	2009-03-17 23:07:18 UTC (rev 964)
+++ MacRuby/branches/experimental/roxor.cpp	2009-03-17 23:18:19 UTC (rev 965)
@@ -233,6 +233,7 @@
 	Function *newArrayFunc;
 	Function *newRangeFunc;
 	Function *newRegexpFunc;
+	Function *strInternFunc;
 	Function *aryGetFunc;
 	Function *newStringFunc;
 	Function *yieldFunc;
@@ -545,6 +546,7 @@
     newArrayFunc = NULL;
     newRangeFunc = NULL;
     newRegexpFunc = NULL;
+    strInternFunc = NULL;
     aryGetFunc = NULL;
     newStringFunc = NULL;
     yieldFunc = NULL;
@@ -2578,6 +2580,22 @@
 	    }
 	    break;
 
+	case NODE_DSYM:
+	    {
+		Value *val = compile_dstr(node);
+
+		if (strInternFunc == NULL) {
+		    strInternFunc = cast<Function>(module->getOrInsertFunction("rb_str_intern_fast",
+				RubyObjTy, RubyObjTy, NULL));
+		}
+
+		std::vector<Value *> params;
+		params.push_back(val);
+
+		return compile_protected_call(strInternFunc, params);
+	    }
+	    break;
+
 	case NODE_EVSTR:
 	    {
 		assert(node->nd_body != NULL);

Modified: MacRuby/branches/experimental/string.c
===================================================================
--- MacRuby/branches/experimental/string.c	2009-03-17 23:07:18 UTC (rev 964)
+++ MacRuby/branches/experimental/string.c	2009-03-17 23:18:19 UTC (rev 965)
@@ -4400,17 +4400,19 @@
  *     'cat and dog'.to_sym   #=> :"cat and dog"
  */
 
+VALUE
+rb_str_intern_fast(VALUE s)
+{
+    return ID2SYM(rb_intern_str(s));
+}
+
 static VALUE
-rb_str_intern(VALUE s, SEL sel)
+rb_str_intern(VALUE str, SEL sel)
 {
-    VALUE str = s;
-    ID id;
-
     if (OBJ_TAINTED(str) && rb_safe_level() >= 1) {
 	rb_raise(rb_eSecurityError, "Insecure: can't intern tainted string");
     }
-    id = rb_intern_str(str);
-    return ID2SYM(id);
+    return rb_str_intern_fast(str);
 }
 
 /*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090317/eccc07d3/attachment-0001.html>


More information about the macruby-changes mailing list