diff options
author | why <why@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-09-13 03:58:33 +0000 |
---|---|---|
committer | why <why@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-09-13 03:58:33 +0000 |
commit | f1827a2fafaa50ba89f35c8c05beffd28b1dd6e6 (patch) | |
tree | 095d144b8790cb1d1a99fbe40e0e79e31f65fcac /ext/syck/handler.c | |
parent | 2007d73102b29e7bf50d08f6690ae5e6ffa5ea9a (diff) | |
download | ruby-f1827a2fafaa50ba89f35c8c05beffd28b1dd6e6.tar.gz |
* lib/yaml.rb: reworking YAML::Stream to use the new
emitter.
* lib/yaml/stream.rb: ditto.
* lib/yaml/rubytypes.rb: added Object#yaml_new.
* lib/yaml/tag.rb: the tag_subclasses? method now
shows up in the class. allow taguri to be set using an accessor.
continue support of Object#to_yaml_type.
* ext/syck/rubyext.c: new emitter code. yaml_new and yaml_initialize
get called, should they be present. consolidated all the diaspora of internal
node types into the family below YAML::Syck::Node -- Map,
Seq, Scalar -- all of whom are SyckNode structs pointing to
Ruby data. moved Object#yaml_new into the node_import and made it the
default behavior. the target_class is always called wih yaml_new, prepended
a parameter, which is the klass. loaded nodes through GenericResolver show their style.
new Resolver#tagurize converts type ids to taguris.
* ext/syck/implicit.re: were 'y' and 'n' seriously omitted??
* ext/syck/emitter.c: renovated emitter, walks the tree in advance.
consolidated redundant block_styles struct into
the scalar_style struct. (this means loaded nodes can now
be sent back to emitter and preserve at least its very basic
formatting.)
* ext/syck/gram.c: headless documents of any kind allowed.
* ext/syck/node.c: new syck_replace_str methods and syck_empty_*
methods for rewriting node contents, while keeping the ID
and other setup info. added syck_seq_assign.
* ext/syck/syck.h: reflect block_styles and new node functions.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9141 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/syck/handler.c')
-rw-r--r-- | ext/syck/handler.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/ext/syck/handler.c b/ext/syck/handler.c index 563feb10ae..d070efa8e5 100644 --- a/ext/syck/handler.c +++ b/ext/syck/handler.c @@ -31,6 +31,9 @@ syck_hdlr_add_node( SyckParser *p, SyckNode *n ) SyckNode * syck_hdlr_add_anchor( SyckParser *p, char *a, SyckNode *n ) { + char *atmp = NULL; + SyckNode *ntmp = NULL; + n->anchor = a; if ( p->bad_anchors != NULL ) { @@ -48,6 +51,13 @@ syck_hdlr_add_anchor( SyckParser *p, char *a, SyckNode *n ) { p->anchors = st_init_strtable(); } + if ( st_lookup( p->anchors, (st_data_t)a, (st_data_t *)&ntmp ) ) + { + if ( ntmp != (void *)1 ) + { + syck_free_node( ntmp ); + } + } st_insert( p->anchors, (st_data_t)a, (st_data_t)n ); return n; } @@ -55,10 +65,19 @@ syck_hdlr_add_anchor( SyckParser *p, char *a, SyckNode *n ) void syck_hdlr_remove_anchor( SyckParser *p, char *a ) { + char *atmp = a; + SyckNode *ntmp; if ( p->anchors == NULL ) { p->anchors = st_init_strtable(); } + if ( st_delete( p->anchors, (st_data_t *)&atmp, (st_data_t *)&ntmp ) ) + { + if ( ntmp != (void *)1 ) + { + syck_free_node( ntmp ); + } + } st_insert( p->anchors, (st_data_t)a, (st_data_t)1 ); } |