[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