mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/syck/emitter.c (syck_emit_seq, syck_emit_map, syck_emit_item):
should output complex key mark even if map's key is empty seq/map. [ruby-core:7129] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9835 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
44bf6c8f49
commit
d54f7b05e8
3 changed files with 40 additions and 21 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
Mon Jan 16 10:13:38 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
|
||||||
|
|
||||||
|
* ext/syck/emitter.c (syck_emit_seq, syck_emit_map, syck_emit_item):
|
||||||
|
should output complex key mark even if map's key is empty seq/map.
|
||||||
|
[ruby-core:7129]
|
||||||
|
|
||||||
Sat Jan 14 03:38:54 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
|
Sat Jan 14 03:38:54 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
|
||||||
|
|
||||||
* file.c (rb_file_s_chmod): avoid warning where sizeof(int) !=
|
* file.c (rb_file_s_chmod): avoid warning where sizeof(int) !=
|
||||||
|
|
|
@ -1003,6 +1003,11 @@ void syck_emit_seq( SyckEmitter *e, char *tag, enum seq_style style )
|
||||||
syck_emitter_write( e, "[", 1 );
|
syck_emitter_write( e, "[", 1 );
|
||||||
lvl->status = syck_lvl_iseq;
|
lvl->status = syck_lvl_iseq;
|
||||||
} else {
|
} else {
|
||||||
|
/* complex key */
|
||||||
|
if ( parent->status == syck_lvl_map && parent->ncount % 2 == 1 ) {
|
||||||
|
syck_emitter_write( e, "? ", 2 );
|
||||||
|
parent->status = syck_lvl_mapx;
|
||||||
|
}
|
||||||
lvl->status = syck_lvl_seq;
|
lvl->status = syck_lvl_seq;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1019,6 +1024,11 @@ void syck_emit_map( SyckEmitter *e, char *tag, enum map_style style )
|
||||||
syck_emitter_write( e, "{", 1 );
|
syck_emitter_write( e, "{", 1 );
|
||||||
lvl->status = syck_lvl_imap;
|
lvl->status = syck_lvl_imap;
|
||||||
} else {
|
} else {
|
||||||
|
/* complex key */
|
||||||
|
if ( parent->status == syck_lvl_map && parent->ncount % 2 == 1 ) {
|
||||||
|
syck_emitter_write( e, "? ", 2 );
|
||||||
|
parent->status = syck_lvl_mapx;
|
||||||
|
}
|
||||||
lvl->status = syck_lvl_map;
|
lvl->status = syck_lvl_map;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1036,18 +1046,11 @@ void syck_emit_item( SyckEmitter *e, st_data_t n )
|
||||||
{
|
{
|
||||||
SyckLevel *parent = syck_emitter_parent_level( e );
|
SyckLevel *parent = syck_emitter_parent_level( e );
|
||||||
|
|
||||||
/* seq-in-map shortcut */
|
/* seq-in-map shortcut -- the lvl->anctag check should be unneccesary but
|
||||||
if ( parent->status == syck_lvl_map && lvl->ncount == 0 ) {
|
* there is a nasty shift/reduce in the parser on this point and
|
||||||
/* complex key */
|
* i'm not ready to tickle it. */
|
||||||
if ( parent->ncount % 2 == 1 ) {
|
if ( lvl->anctag == 0 && parent->status == syck_lvl_map && lvl->ncount == 0 ) {
|
||||||
syck_emitter_write( e, "?", 1 );
|
lvl->spaces = parent->spaces;
|
||||||
parent->status = syck_lvl_mapx;
|
|
||||||
/* shortcut -- the lvl->anctag check should be unneccesary but
|
|
||||||
* there is a nasty shift/reduce in the parser on this point and
|
|
||||||
* i'm not ready to tickle it. */
|
|
||||||
} else if ( lvl->anctag == 0 ) {
|
|
||||||
lvl->spaces = parent->spaces;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* seq-in-seq shortcut */
|
/* seq-in-seq shortcut */
|
||||||
|
@ -1080,15 +1083,6 @@ void syck_emit_item( SyckEmitter *e, st_data_t n )
|
||||||
{
|
{
|
||||||
SyckLevel *parent = syck_emitter_parent_level( e );
|
SyckLevel *parent = syck_emitter_parent_level( e );
|
||||||
|
|
||||||
/* map-in-map */
|
|
||||||
if ( parent->status == syck_lvl_map && lvl->ncount == 0 ) {
|
|
||||||
/* complex key */
|
|
||||||
if ( parent->ncount % 2 == 1 ) {
|
|
||||||
syck_emitter_write( e, "?", 1 );
|
|
||||||
parent->status = syck_lvl_mapx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* map-in-seq shortcut */
|
/* map-in-seq shortcut */
|
||||||
if ( lvl->anctag == 0 && parent->status == syck_lvl_seq && lvl->ncount == 0 ) {
|
if ( lvl->anctag == 0 && parent->status == syck_lvl_seq && lvl->ncount == 0 ) {
|
||||||
int spcs = ( lvl->spaces - parent->spaces ) - 2;
|
int spcs = ( lvl->spaces - parent->spaces ) - 2;
|
||||||
|
|
|
@ -1253,6 +1253,25 @@ EOY
|
||||||
assert_cycle(NumericTest.new(3)) # Subclass of Numeric
|
assert_cycle(NumericTest.new(3)) # Subclass of Numeric
|
||||||
end
|
end
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test empty map/seq in map cycle
|
||||||
|
#
|
||||||
|
def test_empty_map_key
|
||||||
|
#
|
||||||
|
# empty seq as key
|
||||||
|
#
|
||||||
|
o = YAML.load({[]=>""}.to_yaml)
|
||||||
|
assert_equal(Hash, o.class)
|
||||||
|
assert_equal([[]], o.keys)
|
||||||
|
|
||||||
|
#
|
||||||
|
# empty map as key
|
||||||
|
#
|
||||||
|
o = YAML.load({{}=>""}.to_yaml)
|
||||||
|
assert_equal(Hash, o.class)
|
||||||
|
assert_equal([{}], o.keys)
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if $0 == __FILE__
|
if $0 == __FILE__
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue