diff options
author | why <why@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-05-11 06:32:13 +0000 |
---|---|---|
committer | why <why@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-05-11 06:32:13 +0000 |
commit | e44e2ef2e84012bd842228c8b86de776a9a334d6 (patch) | |
tree | 6798f736db01ce77147aa033335f78bd8a092ede /ext/syck/rubyext.c | |
parent | 0b5d8d2d664a544e524a40082affa7c8aa0bc44d (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.c | 16 |
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")); |