summaryrefslogtreecommitdiff
path: root/ext/syck/rubyext.c
diff options
context:
space:
mode:
authorwhy <why@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-05-11 06:32:13 +0000
committerwhy <why@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-05-11 06:32:13 +0000
commite44e2ef2e84012bd842228c8b86de776a9a334d6 (patch)
tree6798f736db01ce77147aa033335f78bd8a092ede /ext/syck/rubyext.c
parent0b5d8d2d664a544e524a40082affa7c8aa0bc44d (diff)
* ext/syck/implicit.c, ext/syck/rubyext.c: transfer methods applied to native loading
* ext/syck/token.c: fix for transfer methods on same indentation as nested mapping * lib/yaml/rubytypes.rb: all type names in lowercase git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3781 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/syck/rubyext.c')
-rw-r--r--ext/syck/rubyext.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/ext/syck/rubyext.c b/ext/syck/rubyext.c
index 96627f1199..67cc9df174 100644
--- a/ext/syck/rubyext.c
+++ b/ext/syck/rubyext.c
@@ -15,7 +15,6 @@
#define RUBY_DOMAIN "ruby.yaml.org,2002"
static ID s_utc, s_read, s_binmode;
-static VALUE str_taguri, str_xprivate;
static VALUE sym_model, sym_generic;
static VALUE sym_scalar, sym_seq, sym_map;
VALUE cParser, cLoader, cNode, oDefaultLoader;
@@ -217,6 +216,7 @@ rb_syck_load_handler(p, n)
VALUE obj;
long i;
int str = 0;
+ int check_transfers = 0;
switch (n->kind)
{
@@ -289,6 +289,7 @@ rb_syck_load_handler(p, n)
}
else
{
+ check_transfers = 1;
obj = rb_str_new( n->data.str->ptr, n->data.str->len );
}
break;
@@ -299,6 +300,7 @@ rb_syck_load_handler(p, n)
{
rb_ary_store( obj, i, syck_seq_read( n, i ) );
}
+ check_transfers = 1;
break;
case syck_map_kind:
@@ -307,13 +309,21 @@ rb_syck_load_handler(p, n)
{
rb_hash_aset( obj, syck_map_read( n, map_key, i ), syck_map_read( n, map_value, i ) );
}
+ check_transfers = 1;
break;
}
+
if ( p->bonus != 0 )
{
VALUE proc = (VALUE)p->bonus;
rb_funcall(proc, rb_intern("call"), 1, obj);
}
+
+ if ( check_transfers == 1 && n->type_id != NULL )
+ {
+ obj = rb_funcall( oDefaultLoader, rb_intern( "transfer" ), 2, rb_str_new2( n->type_id ), obj );
+ }
+
return obj;
}
@@ -631,6 +641,8 @@ syck_loader_transfer( self, type, val )
{
VALUE scheme, name, type_hash, type_proc;
VALUE type_uri = rb_str_new2( taguri );
+ VALUE str_taguri = rb_str_new2("taguri");
+ VALUE str_xprivate = rb_str_new2("x-private");
VALUE parts = rb_str_split( type_uri, ":" );
// rb_funcall(rb_mKernel, rb_intern("p"), 1, parts);
@@ -749,8 +761,6 @@ Init_syck()
s_utc = rb_intern("utc");
s_read = rb_intern("read");
s_binmode = rb_intern("binmode");
- str_taguri = rb_str_new2("taguri");
- str_xprivate = rb_str_new2("x-private");
sym_model = ID2SYM(rb_intern("Model"));
sym_generic = ID2SYM(rb_intern("Generic"));
sym_map = ID2SYM(rb_intern("map"));