[macruby-changes] [2186] MacRuby/branches/experimental
source_changes at macosforge.org
source_changes at macosforge.org
Mon Aug 3 12:31:32 PDT 2009
Revision: 2186
http://trac.macosforge.org/projects/ruby/changeset/2186
Author: pthomson at apple.com
Date: 2009-08-03 12:31:31 -0700 (Mon, 03 Aug 2009)
Log Message:
-----------
Ensured that Ranges are constructed correctly from provided YAML - the inner members of a tagged hash were not having the correct attributes applied to them."
Modified Paths:
--------------
MacRuby/branches/experimental/ext/libyaml/rubyext.c
MacRuby/branches/experimental/lib/yaml/rubytypes.rb
Modified: MacRuby/branches/experimental/ext/libyaml/rubyext.c
===================================================================
--- MacRuby/branches/experimental/ext/libyaml/rubyext.c 2009-08-03 19:31:30 UTC (rev 2185)
+++ MacRuby/branches/experimental/ext/libyaml/rubyext.c 2009-08-03 19:31:31 UTC (rev 2186)
@@ -233,7 +233,8 @@
const char *tag = RSTRING_PTR(tagstr);
if ((strcmp(tag, "tag:yaml.org,2002:int") == 0) ||
(strcmp(tag, "tag:yaml.org,2002:float") == 0) ||
- (strcmp(tag, "tag:ruby.yaml.org,2002:symbol") == 0))
+ (strcmp(tag, "tag:ruby.yaml.org,2002:symbol") == 0) ||
+ (strcmp(tag, "tag:yaml.org,2002:bool") == 0))
{
return NULL;
}
@@ -416,17 +417,21 @@
static VALUE
rb_yaml_resolve_node(yaml_node_t *node, yaml_document_t *document, VALUE tags)
{
+ VALUE tag = rb_str_new2((const char*)node->tag);
+ VALUE handler = rb_hash_lookup(tags, tag);
switch(node->type)
{
case YAML_SCALAR_NODE:
{
+ printf("Tag is %s\n", node->tag);
if (node->data.scalar.style == YAML_PLAIN_SCALAR_STYLE)
{
rb_yaml_guess_type_of_plain_node(node);
+ tag = rb_str_new2((const char*)node->tag);
+ handler = rb_hash_lookup(tags, tag);
+ printf("Tag is now %s\n", node->tag);
}
- VALUE tag = rb_str_new2((const char*)node->tag);
VALUE scalarval = rb_str_new((const char*)node->data.scalar.value, node->data.scalar.length);
- VALUE handler = rb_hash_lookup(tags, tag);
if (rb_respond_to(handler, rb_intern("call")))
{
return rb_funcall(handler, rb_intern("call"), 1, scalarval);
@@ -449,6 +454,14 @@
VALUE new_obj = rb_yaml_resolve_node(subnode, document, tags);
rb_ary_push(arr, new_obj);
}
+ if (rb_respond_to(handler, rb_intern("call")))
+ {
+ return rb_funcall(handler, rb_intern("call"), 1, arr);
+ }
+ else if (rb_respond_to(handler, rb_intern("yaml_new")))
+ {
+ return rb_funcall(handler, rb_intern("yaml_new"), 1, arr);
+ }
return arr;
}
break;
@@ -463,6 +476,14 @@
VALUE v = rb_yaml_resolve_node(yaml_document_get_node(document, pair->value), document, tags);
rb_hash_aset(hash, k, v);
}
+ if (rb_respond_to(handler, rb_intern("call")))
+ {
+ return rb_funcall(handler, rb_intern("call"), 1, hash);
+ }
+ else if (rb_respond_to(handler, rb_intern("yaml_new")))
+ {
+ return rb_funcall(handler, rb_intern("yaml_new"), 1, hash);
+ }
return hash;
}
Modified: MacRuby/branches/experimental/lib/yaml/rubytypes.rb
===================================================================
--- MacRuby/branches/experimental/lib/yaml/rubytypes.rb 2009-08-03 19:31:30 UTC (rev 2185)
+++ MacRuby/branches/experimental/lib/yaml/rubytypes.rb 2009-08-03 19:31:31 UTC (rev 2186)
@@ -67,6 +67,7 @@
class Array
yaml_as "tag:yaml.org,2002:seq"
+
def to_yaml(doc = nil)
YAML::quick_emit(self, doc) do |out|
out.seq(taguri, to_yaml_style) do |seq|
@@ -78,6 +79,7 @@
class Hash
yaml_as "tag:yaml.org,2002:map"
+
def to_yaml(doc = nil)
YAML::quick_emit(self, doc) do |out|
out.map(taguri, to_yaml_style) do |map|
@@ -135,6 +137,24 @@
end
end
+class Range
+ yaml_as "tag:ruby.yaml.org,2002:range"
+
+ def Range.yaml_new(attrs)
+ Range.new(attrs['begin'], attrs['end'], attrs['excl'])
+ end
+
+ def to_yaml(doc=nil)
+ YAML::quick_emit(self, doc) do |out|
+ out.map(taguri, to_yaml_style) do |map|
+ map.add('begin', self.begin)
+ map.add('end', self.end)
+ map.add('excl', self.exclude_end?)
+ end
+ end
+ end
+end
+
class Regexp
yaml_as "tag:ruby.yaml.org,2002:regexp"
def to_yaml(doc = nil)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090803/89212007/attachment-0001.html>
More information about the macruby-changes
mailing list