mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/syck/rubyext.c: refactoring of the transfer method
dispatch. added yaml_org_handler for faster dispatch of transfers to base types. * lib/yaml/rubytypes.rb: removed handling of builtins from Ruby library. * ext/syck/token.c: quoted and block scalars are now implicit !str * ext/syck/implicit.c: empty string detected as !null. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4423 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
52e6a899ea
commit
7cca6c25f0
5 changed files with 989 additions and 941 deletions
13
ChangeLog
13
ChangeLog
|
@ -1,3 +1,16 @@
|
|||
Fri Aug 22 06:13:22 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
|
||||
|
||||
* ext/syck/rubyext.c: refactoring of the transfer method
|
||||
dispatch. added yaml_org_handler for faster dispatch of
|
||||
transfers to base types.
|
||||
|
||||
* lib/yaml/rubytypes.rb: removed handling of builtins from
|
||||
Ruby library.
|
||||
|
||||
* ext/syck/token.c: quoted and block scalars are now implicit !str
|
||||
|
||||
* ext/syck/implicit.c: empty string detected as !null.
|
||||
|
||||
Fri Aug 22 01:00:31 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* eval.c (block_pass): improve passing current block.
|
||||
|
|
1491
ext/syck/implicit.c
1491
ext/syck/implicit.c
File diff suppressed because it is too large
Load diff
|
@ -40,7 +40,7 @@ typedef struct RVALUE {
|
|||
/*
|
||||
* symbols and constants
|
||||
*/
|
||||
static ID s_new, s_utc, s_at, s_to_f, s_read, s_binmode, s_call, s_transfer, s_update, s_dup, s_match;
|
||||
static ID s_new, s_utc, s_at, s_to_f, s_read, s_binmode, s_call, s_transfer, s_update, s_dup, s_match, s_keys, s_to_str, s_unpack, s_tr_bang;
|
||||
static VALUE sym_model, sym_generic;
|
||||
static VALUE sym_scalar, sym_seq, sym_map;
|
||||
VALUE cDate, cParser, cLoader, cNode, cPrivateType, cDomainType, cBadAlias, cMergeKey, cEmitter;
|
||||
|
@ -112,7 +112,7 @@ syck_parser_assign_io(parser, port)
|
|||
VALUE port;
|
||||
{
|
||||
int taint = Qtrue;
|
||||
if (rb_respond_to(port, rb_intern("to_str"))) {
|
||||
if (rb_respond_to(port, s_to_str)) {
|
||||
taint = OBJ_TAINTED(port); /* original taintedness */
|
||||
StringValue(port); /* possible conversion */
|
||||
syck_parser_str( parser, RSTRING(port)->ptr, RSTRING(port)->len, NULL );
|
||||
|
@ -306,79 +306,136 @@ syck_merge_i( entry, hsh )
|
|||
}
|
||||
|
||||
/*
|
||||
* {native mode} node handler
|
||||
* - Converts data into native Ruby types
|
||||
* build a syck node from a Ruby VALUE
|
||||
*/
|
||||
SYMID
|
||||
rb_syck_load_handler(p, n)
|
||||
SyckParser *p;
|
||||
SyckNode *n;
|
||||
SyckNode *
|
||||
rb_new_syck_node( obj, type_id )
|
||||
VALUE obj, type_id;
|
||||
{
|
||||
VALUE obj = Qnil;
|
||||
long i;
|
||||
int check_transfers = 0;
|
||||
struct parser_xtra *bonus;
|
||||
long i = 0;
|
||||
SyckNode *n = NULL;
|
||||
|
||||
if (rb_respond_to(obj, s_to_str))
|
||||
{
|
||||
StringValue(obj); /* possible conversion */
|
||||
n = syck_alloc_str();
|
||||
n->data.str->ptr = RSTRING(obj)->ptr;
|
||||
n->data.str->len = RSTRING(obj)->len;
|
||||
}
|
||||
else if ( rb_obj_is_kind_of( obj, rb_cArray ) )
|
||||
{
|
||||
n = syck_alloc_seq();
|
||||
for ( i = 0; i < RARRAY(obj)->len; i++ )
|
||||
{
|
||||
syck_seq_add(n, rb_ary_entry(obj, i));
|
||||
}
|
||||
}
|
||||
else if ( rb_obj_is_kind_of( obj, rb_cHash ) )
|
||||
{
|
||||
VALUE keys;
|
||||
n = syck_alloc_map();
|
||||
keys = rb_funcall( obj, s_keys, 0 );
|
||||
for ( i = 0; i < RARRAY(keys)->len; i++ )
|
||||
{
|
||||
VALUE key = rb_ary_entry(keys, i);
|
||||
syck_map_add(n, key, rb_hash_aref(obj, key));
|
||||
}
|
||||
}
|
||||
|
||||
if ( n!= NULL && rb_respond_to( type_id, s_to_str ) )
|
||||
{
|
||||
StringValue(type_id);
|
||||
n->type_id = syck_strndup( RSTRING(type_id)->ptr, RSTRING(type_id)->len );
|
||||
}
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
/*
|
||||
* default handler for ruby.yaml.org types
|
||||
*/
|
||||
int
|
||||
yaml_org_handler( n, ref )
|
||||
SyckNode *n;
|
||||
VALUE *ref;
|
||||
{
|
||||
char *type_id = n->type_id;
|
||||
int transferred = 0;
|
||||
long i = 0;
|
||||
VALUE obj = Qnil;
|
||||
|
||||
/*
|
||||
* If prefixed with YAML_DOMAIN, skip to type name
|
||||
*/
|
||||
switch (n->kind)
|
||||
{
|
||||
case syck_str_kind:
|
||||
if ( n->type_id == NULL || strcmp( n->type_id, "str" ) == 0 )
|
||||
transferred = 1;
|
||||
if ( type_id == NULL || strcmp( type_id, "str" ) == 0 )
|
||||
{
|
||||
obj = rb_str_new( n->data.str->ptr, n->data.str->len );
|
||||
}
|
||||
else if ( strcmp( n->type_id, "null" ) == 0 )
|
||||
else if ( strcmp( type_id, "null" ) == 0 )
|
||||
{
|
||||
obj = Qnil;
|
||||
}
|
||||
else if ( strcmp( n->type_id, "bool#yes" ) == 0 )
|
||||
else if ( strcmp( type_id, "binary" ) == 0 )
|
||||
{
|
||||
VALUE arr;
|
||||
obj = rb_str_new( n->data.str->ptr, n->data.str->len );
|
||||
rb_funcall( obj, s_tr_bang, 2, rb_str_new2( "\n\t " ), rb_str_new2( "" ) );
|
||||
arr = rb_funcall( obj, s_unpack, 1, rb_str_new2( "m" ) );
|
||||
obj = rb_ary_shift( arr );
|
||||
}
|
||||
else if ( strcmp( type_id, "bool#yes" ) == 0 )
|
||||
{
|
||||
obj = Qtrue;
|
||||
}
|
||||
else if ( strcmp( n->type_id, "bool#no" ) == 0 )
|
||||
else if ( strcmp( type_id, "bool#no" ) == 0 )
|
||||
{
|
||||
obj = Qfalse;
|
||||
}
|
||||
else if ( strcmp( n->type_id, "int#hex" ) == 0 )
|
||||
else if ( strcmp( type_id, "int#hex" ) == 0 )
|
||||
{
|
||||
obj = rb_cstr2inum( n->data.str->ptr, 16 );
|
||||
}
|
||||
else if ( strcmp( n->type_id, "int#oct" ) == 0 )
|
||||
else if ( strcmp( type_id, "int#oct" ) == 0 )
|
||||
{
|
||||
obj = rb_cstr2inum( n->data.str->ptr, 8 );
|
||||
}
|
||||
else if ( strncmp( n->type_id, "int", 3 ) == 0 )
|
||||
else if ( strncmp( type_id, "int", 3 ) == 0 )
|
||||
{
|
||||
syck_str_blow_away_commas( n );
|
||||
obj = rb_cstr2inum( n->data.str->ptr, 10 );
|
||||
}
|
||||
else if ( strcmp( n->type_id, "float#nan" ) == 0 )
|
||||
else if ( strcmp( type_id, "float#nan" ) == 0 )
|
||||
{
|
||||
obj = rb_float_new( S_nan() );
|
||||
}
|
||||
else if ( strcmp( n->type_id, "float#inf" ) == 0 )
|
||||
else if ( strcmp( type_id, "float#inf" ) == 0 )
|
||||
{
|
||||
obj = rb_float_new( S_inf() );
|
||||
}
|
||||
else if ( strcmp( n->type_id, "float#neginf" ) == 0 )
|
||||
else if ( strcmp( type_id, "float#neginf" ) == 0 )
|
||||
{
|
||||
obj = rb_float_new( -S_inf() );
|
||||
}
|
||||
else if ( strncmp( n->type_id, "float", 5 ) == 0 )
|
||||
else if ( strncmp( type_id, "float", 5 ) == 0 )
|
||||
{
|
||||
double f;
|
||||
syck_str_blow_away_commas( n );
|
||||
f = strtod( n->data.str->ptr, NULL );
|
||||
obj = rb_float_new( f );
|
||||
}
|
||||
else if ( strcmp( n->type_id, "timestamp#iso8601" ) == 0 )
|
||||
else if ( strcmp( type_id, "timestamp#iso8601" ) == 0 )
|
||||
{
|
||||
obj = rb_syck_mktime( n->data.str->ptr );
|
||||
}
|
||||
else if ( strcmp( n->type_id, "timestamp#spaced" ) == 0 )
|
||||
else if ( strcmp( type_id, "timestamp#spaced" ) == 0 )
|
||||
{
|
||||
obj = rb_syck_mktime( n->data.str->ptr );
|
||||
}
|
||||
else if ( strcmp( n->type_id, "timestamp#ymd" ) == 0 )
|
||||
else if ( strcmp( type_id, "timestamp#ymd" ) == 0 )
|
||||
{
|
||||
char *ptr = n->data.str->ptr;
|
||||
VALUE year, mon, day;
|
||||
|
@ -399,17 +456,17 @@ rb_syck_load_handler(p, n)
|
|||
|
||||
obj = rb_funcall( cDate, s_new, 3, year, mon, day );
|
||||
}
|
||||
else if ( strncmp( n->type_id, "timestamp", 9 ) == 0 )
|
||||
else if ( strncmp( type_id, "timestamp", 9 ) == 0 )
|
||||
{
|
||||
obj = rb_syck_mktime( n->data.str->ptr );
|
||||
}
|
||||
else if ( strncmp( n->type_id, "merge", 5 ) == 0 )
|
||||
else if ( strncmp( type_id, "merge", 5 ) == 0 )
|
||||
{
|
||||
obj = rb_funcall( cMergeKey, s_new, 0 );
|
||||
}
|
||||
else
|
||||
{
|
||||
check_transfers = 1;
|
||||
transferred = 0;
|
||||
obj = rb_str_new( n->data.str->ptr, n->data.str->len );
|
||||
}
|
||||
break;
|
||||
|
@ -420,7 +477,10 @@ rb_syck_load_handler(p, n)
|
|||
{
|
||||
rb_ary_store( obj, i, syck_seq_read( n, i ) );
|
||||
}
|
||||
check_transfers = 1;
|
||||
if ( type_id == NULL || strcmp( type_id, "seq" ) == 0 )
|
||||
{
|
||||
transferred = 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case syck_map_kind:
|
||||
|
@ -463,10 +523,38 @@ rb_syck_load_handler(p, n)
|
|||
rb_hash_aset( obj, k, v );
|
||||
}
|
||||
}
|
||||
check_transfers = 1;
|
||||
if ( type_id == NULL || strcmp( type_id, "map" ) == 0 )
|
||||
{
|
||||
transferred = 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
*ref = obj;
|
||||
return transferred;
|
||||
}
|
||||
|
||||
/*
|
||||
* {native mode} node handler
|
||||
* - Converts data into native Ruby types
|
||||
*/
|
||||
SYMID
|
||||
rb_syck_load_handler(p, n)
|
||||
SyckParser *p;
|
||||
SyckNode *n;
|
||||
{
|
||||
VALUE obj = Qnil;
|
||||
struct parser_xtra *bonus;
|
||||
|
||||
/*
|
||||
* Attempt common transfers
|
||||
*/
|
||||
int transferred = yaml_org_handler(n, &obj);
|
||||
if ( transferred == 0 && n->type_id != NULL )
|
||||
{
|
||||
obj = rb_funcall( oDefaultLoader, s_transfer, 2, rb_str_new2( n->type_id ), obj );
|
||||
}
|
||||
|
||||
/*
|
||||
* ID already set, let's alter the symbol table to accept the new object
|
||||
*/
|
||||
|
@ -481,11 +569,6 @@ rb_syck_load_handler(p, n)
|
|||
if ( bonus->taint) OBJ_TAINT( obj );
|
||||
if ( bonus->proc != 0 ) rb_funcall(bonus->proc, s_call, 1, obj);
|
||||
|
||||
if ( check_transfers == 1 && n->type_id != NULL )
|
||||
{
|
||||
obj = rb_funcall( oDefaultLoader, s_transfer, 2, rb_str_new2( n->type_id ), obj );
|
||||
}
|
||||
|
||||
rb_hash_aset(bonus->data, INT2FIX(RHASH(bonus->data)->tbl->num_entries), obj);
|
||||
return obj;
|
||||
}
|
||||
|
@ -824,6 +907,7 @@ syck_loader_transfer( self, type, val )
|
|||
*/
|
||||
if ( TYPE(val) == T_STRING )
|
||||
{
|
||||
StringValue(val);
|
||||
taguri = syck_match_implicit( RSTRING(val)->ptr, RSTRING(val)->len );
|
||||
taguri = syck_taguri( YAML_DOMAIN, taguri, strlen( taguri ) );
|
||||
}
|
||||
|
@ -835,10 +919,12 @@ syck_loader_transfer( self, type, val )
|
|||
|
||||
if ( taguri != NULL )
|
||||
{
|
||||
int transferred = 0;
|
||||
VALUE scheme, name, type_hash, domain = Qnil, type_proc = Qnil;
|
||||
VALUE type_uri = rb_str_new2( taguri );
|
||||
VALUE str_taguri = rb_str_new2("taguri");
|
||||
VALUE str_xprivate = rb_str_new2("x-private");
|
||||
VALUE str_yaml_domain = rb_str_new2(YAML_DOMAIN);
|
||||
VALUE parts = rb_str_split( type_uri, ":" );
|
||||
|
||||
scheme = rb_ary_shift( parts );
|
||||
|
@ -854,6 +940,21 @@ syck_loader_transfer( self, type, val )
|
|||
name = rb_ary_join( parts, rb_str_new2( ":" ) );
|
||||
type_hash = rb_iv_get(self, "@families");
|
||||
type_hash = rb_hash_aref(type_hash, domain);
|
||||
|
||||
/*
|
||||
* Route yaml.org types through the transfer
|
||||
* method here in this extension
|
||||
*/
|
||||
if ( rb_str_cmp( domain, str_yaml_domain ) == 0 )
|
||||
{
|
||||
SyckNode *n = rb_new_syck_node(val, name);
|
||||
if ( n != NULL )
|
||||
{
|
||||
transferred = yaml_org_handler(n, &val);
|
||||
S_FREE( n );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -861,30 +962,34 @@ syck_loader_transfer( self, type, val )
|
|||
scheme);
|
||||
}
|
||||
|
||||
if ( rb_obj_is_instance_of( type_hash, rb_cHash ) )
|
||||
if ( ! transferred )
|
||||
{
|
||||
type_proc = rb_hash_aref( type_hash, name );
|
||||
if ( NIL_P( type_proc ) )
|
||||
if ( rb_obj_is_instance_of( type_hash, rb_cHash ) )
|
||||
{
|
||||
VALUE col = rb_ary_new();
|
||||
rb_ary_push( col, name );
|
||||
rb_iterate(rb_each, type_hash, transfer_find_i, col );
|
||||
name = rb_ary_shift( col );
|
||||
type_proc = rb_ary_shift( col );
|
||||
type_proc = rb_hash_aref( type_hash, name );
|
||||
if ( NIL_P( type_proc ) )
|
||||
{
|
||||
VALUE col = rb_ary_new();
|
||||
rb_ary_push( col, name );
|
||||
rb_iterate(rb_each, type_hash, transfer_find_i, col );
|
||||
name = rb_ary_shift( col );
|
||||
type_proc = rb_ary_shift( col );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( rb_respond_to( type_proc, s_call ) )
|
||||
{
|
||||
val = rb_funcall(type_proc, s_call, 2, type_uri, val);
|
||||
}
|
||||
else if ( rb_str_cmp( scheme, str_xprivate ) == 0 )
|
||||
{
|
||||
val = rb_funcall(cPrivateType, s_new, 2, name, val);
|
||||
}
|
||||
else
|
||||
{
|
||||
val = rb_funcall(cDomainType, s_new, 3, domain, name, val);
|
||||
if ( rb_respond_to( type_proc, s_call ) )
|
||||
{
|
||||
val = rb_funcall(type_proc, s_call, 2, type_uri, val);
|
||||
}
|
||||
else if ( rb_str_cmp( scheme, str_xprivate ) == 0 )
|
||||
{
|
||||
val = rb_funcall(cPrivateType, s_new, 2, name, val);
|
||||
}
|
||||
else
|
||||
{
|
||||
val = rb_funcall(cDomainType, s_new, 3, domain, name, val);
|
||||
}
|
||||
transferred = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -996,7 +1101,7 @@ rb_syck_output_handler( emitter, str, len )
|
|||
long len;
|
||||
{
|
||||
VALUE dest = (VALUE)emitter->bonus;
|
||||
if ( rb_respond_to( dest, rb_intern("to_str") ) ) {
|
||||
if ( rb_respond_to( dest, s_to_str ) ) {
|
||||
rb_str_cat( dest, str, len );
|
||||
} else {
|
||||
rb_io_write( dest, rb_str_new( str, len ) );
|
||||
|
@ -1175,6 +1280,10 @@ Init_syck()
|
|||
s_update = rb_intern("update");
|
||||
s_dup = rb_intern("dup");
|
||||
s_match = rb_intern("match");
|
||||
s_keys = rb_intern("keys");
|
||||
s_to_str = rb_intern("to_str");
|
||||
s_tr_bang = rb_intern("tr!");
|
||||
s_unpack = rb_intern("unpack");
|
||||
|
||||
sym_model = ID2SYM(rb_intern("Model"));
|
||||
sym_generic = ID2SYM(rb_intern("Generic"));
|
||||
|
|
125
ext/syck/token.c
125
ext/syck/token.c
|
@ -1,4 +1,4 @@
|
|||
/* Generated by re2c 0.5 on Mon Jul 28 21:10:39 2003 */
|
||||
/* Generated by re2c 0.5 on Thu Aug 21 14:28:35 2003 */
|
||||
#line 1 "token.re"
|
||||
/*
|
||||
* token.re
|
||||
|
@ -137,6 +137,7 @@
|
|||
#define RETURN_YAML_BLOCK() \
|
||||
{ \
|
||||
SyckNode *n = syck_alloc_str(); \
|
||||
n->type_id = syck_strndup( "str", 3 ); \
|
||||
n->data.str->ptr = qstr; \
|
||||
n->data.str->len = qidx; \
|
||||
if ( qidx > 0 ) \
|
||||
|
@ -228,7 +229,7 @@ sycklex( YYSTYPE *sycklval, SyckParser *parser )
|
|||
return t;
|
||||
}
|
||||
|
||||
#line 246
|
||||
#line 247
|
||||
|
||||
|
||||
if ( YYLINEPTR != YYCURSOR )
|
||||
|
@ -264,7 +265,7 @@ yy2: yyaccept = 0;
|
|||
default: goto yy3;
|
||||
}
|
||||
yy3:
|
||||
#line 302
|
||||
#line 303
|
||||
{ YYPOS(0);
|
||||
goto Document;
|
||||
}
|
||||
|
@ -276,13 +277,13 @@ yy4: yyaccept = 0;
|
|||
}
|
||||
yy5: yych = *++YYCURSOR;
|
||||
yy6:
|
||||
#line 287
|
||||
#line 288
|
||||
{ eat_comments( parser );
|
||||
goto Header;
|
||||
}
|
||||
yy7: yych = *++YYCURSOR;
|
||||
yy8:
|
||||
#line 291
|
||||
#line 292
|
||||
{ SyckLevel *lvl = CURRENT_LEVEL();
|
||||
ENSURE_YAML_IEND(lvl, -1);
|
||||
YYPOS(0);
|
||||
|
@ -292,7 +293,7 @@ yy9: yyaccept = 1;
|
|||
yych = *(YYMARKER = ++YYCURSOR);
|
||||
goto yy14;
|
||||
yy10:
|
||||
#line 297
|
||||
#line 298
|
||||
{ int indt_len;
|
||||
GOBBLE_UP_YAML_INDENT( indt_len, YYTOKEN );
|
||||
goto Header;
|
||||
|
@ -339,7 +340,7 @@ yy18: yych = *++YYCURSOR;
|
|||
}
|
||||
yy19: yych = *++YYCURSOR;
|
||||
yy20:
|
||||
#line 273
|
||||
#line 274
|
||||
{ SyckLevel *lvl = CURRENT_LEVEL();
|
||||
if ( lvl->status == syck_lvl_header )
|
||||
{
|
||||
|
@ -379,7 +380,7 @@ yy25: yych = *++YYCURSOR;
|
|||
}
|
||||
yy26: yych = *++YYCURSOR;
|
||||
yy27:
|
||||
#line 259
|
||||
#line 260
|
||||
{ SyckLevel *lvl = CURRENT_LEVEL();
|
||||
if ( lvl->status == syck_lvl_header )
|
||||
{
|
||||
|
@ -406,7 +407,7 @@ yy30: yych = *++YYCURSOR;
|
|||
default: goto yy16;
|
||||
}
|
||||
}
|
||||
#line 306
|
||||
#line 307
|
||||
|
||||
|
||||
Document:
|
||||
|
@ -449,7 +450,7 @@ yy33: yyaccept = 0;
|
|||
yych = *(YYMARKER = ++YYCURSOR);
|
||||
goto yy86;
|
||||
yy34:
|
||||
#line 320
|
||||
#line 321
|
||||
{ /* Isolate spaces */
|
||||
int indt_len;
|
||||
GOBBLE_UP_YAML_INDENT( indt_len, YYTOKEN );
|
||||
|
@ -470,13 +471,13 @@ yy35: yych = *++YYCURSOR;
|
|||
default: goto yy36;
|
||||
}
|
||||
yy36:
|
||||
#line 407
|
||||
#line 408
|
||||
{ ENSURE_YAML_IOPEN(lvl, 0, 1);
|
||||
goto Plain;
|
||||
}
|
||||
yy37: yych = *++YYCURSOR;
|
||||
yy38:
|
||||
#line 335
|
||||
#line 336
|
||||
{ ENSURE_YAML_IOPEN(lvl, 0, 1);
|
||||
lvl = CURRENT_LEVEL();
|
||||
ADD_LEVEL(lvl->spaces + 1, syck_lvl_inline);
|
||||
|
@ -484,7 +485,7 @@ yy38:
|
|||
}
|
||||
yy39: yych = *++YYCURSOR;
|
||||
yy40:
|
||||
#line 341
|
||||
#line 342
|
||||
{ POP_LEVEL();
|
||||
return YYTOKEN[0];
|
||||
}
|
||||
|
@ -634,17 +635,17 @@ yy44: yych = *++YYCURSOR;
|
|||
}
|
||||
yy45: yych = *++YYCURSOR;
|
||||
yy46:
|
||||
#line 380
|
||||
#line 381
|
||||
{ ENSURE_YAML_IOPEN(lvl, 0, 1);
|
||||
goto TransferMethod; }
|
||||
yy47: yych = *++YYCURSOR;
|
||||
yy48:
|
||||
#line 383
|
||||
#line 384
|
||||
{ ENSURE_YAML_IOPEN(lvl, 0, 1);
|
||||
goto SingleQuote; }
|
||||
yy49: yych = *++YYCURSOR;
|
||||
yy50:
|
||||
#line 386
|
||||
#line 387
|
||||
{ ENSURE_YAML_IOPEN(lvl, 0, 1);
|
||||
goto DoubleQuote; }
|
||||
yy51: yyaccept = 1;
|
||||
|
@ -667,18 +668,18 @@ yy51: yyaccept = 1;
|
|||
}
|
||||
yy52: yych = *++YYCURSOR;
|
||||
yy53:
|
||||
#line 396
|
||||
#line 397
|
||||
{ eat_comments( parser );
|
||||
goto Document;
|
||||
}
|
||||
yy54: yych = *++YYCURSOR;
|
||||
goto yy60;
|
||||
yy55:
|
||||
#line 400
|
||||
#line 401
|
||||
{ goto Document; }
|
||||
yy56: yych = *++YYCURSOR;
|
||||
yy57:
|
||||
#line 402
|
||||
#line 403
|
||||
{ ENSURE_YAML_IEND(lvl, -1);
|
||||
YYPOS(0);
|
||||
return 0;
|
||||
|
@ -718,7 +719,7 @@ yy63: YYCURSOR = YYMARKER;
|
|||
}
|
||||
yy64: yych = *++YYCURSOR;
|
||||
yy65:
|
||||
#line 389
|
||||
#line 390
|
||||
{ if ( is_newline( YYCURSOR - 1 ) )
|
||||
{
|
||||
YYCURSOR--;
|
||||
|
@ -804,7 +805,7 @@ yy70: switch(yych){
|
|||
default: goto yy71;
|
||||
}
|
||||
yy71:
|
||||
#line 375
|
||||
#line 376
|
||||
{ ENSURE_YAML_IOPEN(lvl, 0, 1);
|
||||
sycklval->name = syck_strndup( YYTOKEN + 1, YYCURSOR - YYTOKEN - 1 );
|
||||
return YAML_ALIAS;
|
||||
|
@ -876,7 +877,7 @@ yy73: switch(yych){
|
|||
default: goto yy74;
|
||||
}
|
||||
yy74:
|
||||
#line 363
|
||||
#line 364
|
||||
{ ENSURE_YAML_IOPEN(lvl, 0, 1);
|
||||
sycklval->name = syck_strndup( YYTOKEN + 1, YYCURSOR - YYTOKEN - 1 );
|
||||
|
||||
|
@ -890,7 +891,7 @@ yy74:
|
|||
}
|
||||
yy75: yych = *++YYCURSOR;
|
||||
yy76:
|
||||
#line 349
|
||||
#line 350
|
||||
{ ENSURE_YAML_IOPEN(lvl, YYTOKEN - YYLINEPTR, 1);
|
||||
FORCE_NEXT_TOKEN(YAML_IOPEN);
|
||||
if ( is_newline( YYCURSOR ) || is_newline( YYCURSOR - 1 ) )
|
||||
|
@ -918,7 +919,7 @@ yy79: yych = *++YYCURSOR;
|
|||
}
|
||||
yy80: yych = *++YYCURSOR;
|
||||
yy81:
|
||||
#line 345
|
||||
#line 346
|
||||
{ YYPOS(1);
|
||||
return YYTOKEN[0];
|
||||
}
|
||||
|
@ -951,7 +952,7 @@ yy87: ++YYCURSOR;
|
|||
default: goto yy63;
|
||||
}
|
||||
}
|
||||
#line 411
|
||||
#line 412
|
||||
|
||||
}
|
||||
|
||||
|
@ -1058,14 +1059,14 @@ yy91: yyaccept = 0;
|
|||
default: goto yy92;
|
||||
}
|
||||
yy92:
|
||||
#line 424
|
||||
#line 425
|
||||
{ YYCURSOR = YYTOKTMP;
|
||||
return YAML_DOCSEP;
|
||||
}
|
||||
yy93: yych = *++YYCURSOR;
|
||||
goto yy97;
|
||||
yy94:
|
||||
#line 422
|
||||
#line 423
|
||||
{ goto Directive; }
|
||||
yy95: yych = *++YYCURSOR;
|
||||
goto yy92;
|
||||
|
@ -1317,10 +1318,10 @@ yy102: switch(yych){
|
|||
default: goto yy103;
|
||||
}
|
||||
yy103:
|
||||
#line 420
|
||||
#line 421
|
||||
{ goto Directive; }
|
||||
}
|
||||
#line 427
|
||||
#line 428
|
||||
|
||||
|
||||
}
|
||||
|
@ -1364,7 +1365,7 @@ yy106: yyaccept = 0;
|
|||
yych = *(YYMARKER = ++YYCURSOR);
|
||||
goto yy132;
|
||||
yy107:
|
||||
#line 450
|
||||
#line 451
|
||||
{ int indt_len, nl_count = 0;
|
||||
SyckLevel *lvl;
|
||||
char *tok = YYTOKTMP;
|
||||
|
@ -1402,7 +1403,7 @@ yy108: yych = *++YYCURSOR;
|
|||
default: goto yy109;
|
||||
}
|
||||
yy109:
|
||||
#line 504
|
||||
#line 505
|
||||
{ QUOTECATS(qstr, qcapa, qidx, YYTOKTMP, YYCURSOR - YYTOKTMP);
|
||||
goto Plain2;
|
||||
}
|
||||
|
@ -1416,7 +1417,7 @@ yy110: yyaccept = 1;
|
|||
}
|
||||
yy111: yych = *++YYCURSOR;
|
||||
yy112:
|
||||
#line 484
|
||||
#line 485
|
||||
{ if ( plvl->status != syck_lvl_inline )
|
||||
{
|
||||
if ( *(YYCURSOR - 1) == ' ' || is_newline( YYCURSOR - 1 ) )
|
||||
|
@ -1442,17 +1443,17 @@ yy114: yych = *++YYCURSOR;
|
|||
default: goto yy115;
|
||||
}
|
||||
yy115:
|
||||
#line 502
|
||||
#line 503
|
||||
{ goto Plain3; }
|
||||
yy116: yych = *++YYCURSOR;
|
||||
yy117:
|
||||
#line 500
|
||||
#line 501
|
||||
{ RETURN_IMPLICIT(); }
|
||||
yy118: yych = *++YYCURSOR;
|
||||
goto yy109;
|
||||
yy119: yych = *++YYCURSOR;
|
||||
yy120:
|
||||
#line 496
|
||||
#line 497
|
||||
{ eat_comments( parser );
|
||||
RETURN_IMPLICIT();
|
||||
}
|
||||
|
@ -1477,7 +1478,7 @@ yy125: YYCURSOR = YYMARKER;
|
|||
}
|
||||
yy126: yych = *++YYCURSOR;
|
||||
yy127:
|
||||
#line 482
|
||||
#line 483
|
||||
{ RETURN_IMPLICIT(); }
|
||||
yy128: ++YYCURSOR;
|
||||
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
||||
|
@ -1508,7 +1509,7 @@ yy133: ++YYCURSOR;
|
|||
default: goto yy125;
|
||||
}
|
||||
}
|
||||
#line 508
|
||||
#line 509
|
||||
|
||||
}
|
||||
|
||||
|
@ -1540,7 +1541,7 @@ yy136: yyaccept = 0;
|
|||
yych = *(YYMARKER = ++YYCURSOR);
|
||||
goto yy147;
|
||||
yy137:
|
||||
#line 522
|
||||
#line 523
|
||||
{ int indt_len;
|
||||
int nl_count = 0;
|
||||
SyckLevel *lvl;
|
||||
|
@ -1582,7 +1583,7 @@ yy138: yych = *++YYCURSOR;
|
|||
default: goto yy139;
|
||||
}
|
||||
yy139:
|
||||
#line 576
|
||||
#line 578
|
||||
{ QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1));
|
||||
goto SingleQuote2;
|
||||
}
|
||||
|
@ -1592,7 +1593,7 @@ yy140: yych = *++YYCURSOR;
|
|||
default: goto yy141;
|
||||
}
|
||||
yy141:
|
||||
#line 562
|
||||
#line 563
|
||||
{ SyckLevel *lvl;
|
||||
SyckNode *n = syck_alloc_str();
|
||||
lvl = CURRENT_LEVEL();
|
||||
|
@ -1601,6 +1602,7 @@ yy141:
|
|||
{
|
||||
POP_LEVEL();
|
||||
}
|
||||
n->type_id = syck_strndup( "str", 3 );
|
||||
n->data.str->ptr = qstr;
|
||||
n->data.str->len = qidx;
|
||||
sycklval->nodeData = n;
|
||||
|
@ -1612,7 +1614,7 @@ yy143: yych = *++YYCURSOR;
|
|||
goto yy139;
|
||||
yy144: yych = *++YYCURSOR;
|
||||
yy145:
|
||||
#line 558
|
||||
#line 559
|
||||
{ QUOTECAT(qstr, qcapa, qidx, '\'');
|
||||
goto SingleQuote2;
|
||||
}
|
||||
|
@ -1637,7 +1639,7 @@ yy149: YYCURSOR = YYMARKER;
|
|||
case 0: goto yy137;
|
||||
}
|
||||
}
|
||||
#line 580
|
||||
#line 582
|
||||
|
||||
|
||||
}
|
||||
|
@ -1674,7 +1676,7 @@ yy152: yyaccept = 0;
|
|||
yych = *(YYMARKER = ++YYCURSOR);
|
||||
goto yy174;
|
||||
yy153:
|
||||
#line 598
|
||||
#line 600
|
||||
{ int indt_len;
|
||||
int nl_count = 0;
|
||||
SyckLevel *lvl;
|
||||
|
@ -1720,7 +1722,7 @@ yy154: yych = *++YYCURSOR;
|
|||
default: goto yy155;
|
||||
}
|
||||
yy155:
|
||||
#line 682
|
||||
#line 685
|
||||
{ QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1));
|
||||
goto DoubleQuote2;
|
||||
}
|
||||
|
@ -1738,7 +1740,7 @@ yy156: yyaccept = 1;
|
|||
}
|
||||
yy157: yych = *++YYCURSOR;
|
||||
yy158:
|
||||
#line 668
|
||||
#line 670
|
||||
{ SyckLevel *lvl;
|
||||
SyckNode *n = syck_alloc_str();
|
||||
lvl = CURRENT_LEVEL();
|
||||
|
@ -1747,6 +1749,7 @@ yy158:
|
|||
{
|
||||
POP_LEVEL();
|
||||
}
|
||||
n->type_id = syck_strndup( "str", 3 );
|
||||
n->data.str->ptr = qstr;
|
||||
n->data.str->len = qidx;
|
||||
sycklval->nodeData = n;
|
||||
|
@ -1772,7 +1775,7 @@ yy163: YYCURSOR = YYMARKER;
|
|||
}
|
||||
yy164: yych = *++YYCURSOR;
|
||||
yy165:
|
||||
#line 663
|
||||
#line 665
|
||||
{ keep_nl = 0;
|
||||
YYCURSOR--;
|
||||
goto DoubleQuote2;
|
||||
|
@ -1808,7 +1811,7 @@ yy167: yych = *++YYCURSOR;
|
|||
}
|
||||
yy168: yych = *++YYCURSOR;
|
||||
yy169:
|
||||
#line 638
|
||||
#line 640
|
||||
{ char ch = *( YYCURSOR - 1 );
|
||||
switch ( ch )
|
||||
{
|
||||
|
@ -1850,7 +1853,7 @@ yy170: yych = *++YYCURSOR;
|
|||
}
|
||||
yy171: yych = *++YYCURSOR;
|
||||
yy172:
|
||||
#line 654
|
||||
#line 656
|
||||
{ long ch;
|
||||
char *chr_text = syck_strndup( YYTOKTMP, 4 );
|
||||
chr_text[0] = '0';
|
||||
|
@ -1876,7 +1879,7 @@ yy175: ++YYCURSOR;
|
|||
default: goto yy163;
|
||||
}
|
||||
}
|
||||
#line 686
|
||||
#line 689
|
||||
|
||||
}
|
||||
|
||||
|
@ -1911,7 +1914,7 @@ yy178: YYCURSOR = YYMARKER;
|
|||
}
|
||||
yy179: yych = *++YYCURSOR;
|
||||
yy180:
|
||||
#line 700
|
||||
#line 703
|
||||
{ SyckLevel *lvl;
|
||||
YYCURSOR = YYTOKTMP;
|
||||
if ( YYCURSOR == YYTOKEN + 1 )
|
||||
|
@ -1969,7 +1972,7 @@ yy182: yych = *++YYCURSOR;
|
|||
default: goto yy183;
|
||||
}
|
||||
yy183:
|
||||
#line 762
|
||||
#line 765
|
||||
{ QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1));
|
||||
goto TransferMethod2;
|
||||
}
|
||||
|
@ -2031,7 +2034,7 @@ yy187: yych = *++YYCURSOR;
|
|||
}
|
||||
yy188: yych = *++YYCURSOR;
|
||||
yy189:
|
||||
#line 753
|
||||
#line 756
|
||||
{ long ch;
|
||||
char *chr_text = syck_strndup( YYTOKTMP, 4 );
|
||||
chr_text[0] = '0';
|
||||
|
@ -2050,7 +2053,7 @@ yy192: switch(yych){
|
|||
default: goto yy180;
|
||||
}
|
||||
}
|
||||
#line 767
|
||||
#line 770
|
||||
|
||||
}
|
||||
|
||||
|
@ -2115,7 +2118,7 @@ yy195: yyaccept = 0;
|
|||
yych = *(YYMARKER = ++YYCURSOR);
|
||||
goto yy205;
|
||||
yy196:
|
||||
#line 814
|
||||
#line 817
|
||||
{ char *pacer;
|
||||
char *tok = YYTOKTMP;
|
||||
int indt_len = 0, nl_count = 0, fold_nl = 0, nl_begin = 0;
|
||||
|
@ -2187,13 +2190,13 @@ yy197: yych = *++YYCURSOR;
|
|||
default: goto yy198;
|
||||
}
|
||||
yy198:
|
||||
#line 900
|
||||
#line 903
|
||||
{ QUOTECAT(qstr, qcapa, qidx, *YYTOKTMP);
|
||||
goto ScalarBlock2;
|
||||
}
|
||||
yy199: yych = *++YYCURSOR;
|
||||
yy200:
|
||||
#line 881
|
||||
#line 884
|
||||
{ lvl = CURRENT_LEVEL();
|
||||
if ( lvl->status != syck_lvl_block )
|
||||
{
|
||||
|
@ -2208,7 +2211,7 @@ yy200:
|
|||
}
|
||||
yy201: yych = *++YYCURSOR;
|
||||
yy202:
|
||||
#line 895
|
||||
#line 898
|
||||
{ YYCURSOR--;
|
||||
POP_LEVEL();
|
||||
RETURN_YAML_BLOCK();
|
||||
|
@ -2236,7 +2239,7 @@ yy207: YYCURSOR = YYMARKER;
|
|||
case 0: goto yy196;
|
||||
}
|
||||
}
|
||||
#line 905
|
||||
#line 908
|
||||
|
||||
}
|
||||
|
||||
|
@ -2269,7 +2272,7 @@ yy208:
|
|||
}
|
||||
yy210: yych = *++YYCURSOR;
|
||||
yy211:
|
||||
#line 923
|
||||
#line 926
|
||||
{ YYCURSOR = tok;
|
||||
return;
|
||||
}
|
||||
|
@ -2282,7 +2285,7 @@ yy213: yych = *++YYCURSOR;
|
|||
default: goto yy214;
|
||||
}
|
||||
yy214:
|
||||
#line 927
|
||||
#line 930
|
||||
{ goto Comment;
|
||||
}
|
||||
yy215: yych = *++YYCURSOR;
|
||||
|
@ -2308,7 +2311,7 @@ yy219: YYCURSOR = YYMARKER;
|
|||
case 0: goto yy211;
|
||||
}
|
||||
}
|
||||
#line 930
|
||||
#line 933
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -85,7 +85,6 @@ hash_proc = Proc.new { |type, val|
|
|||
end
|
||||
val
|
||||
}
|
||||
YAML.add_builtin_type( 'map', &hash_proc )
|
||||
YAML.add_ruby_type( /^hash/, &hash_proc )
|
||||
|
||||
module YAML
|
||||
|
@ -237,7 +236,6 @@ array_proc = Proc.new { |type, val|
|
|||
val.to_a
|
||||
end
|
||||
}
|
||||
YAML.add_builtin_type( 'seq', &array_proc )
|
||||
YAML.add_ruby_type( /^array/, &array_proc )
|
||||
|
||||
#
|
||||
|
@ -319,16 +317,6 @@ class String
|
|||
end
|
||||
end
|
||||
|
||||
YAML.add_builtin_type( 'str' ) { |type,val| val.to_s }
|
||||
YAML.add_builtin_type( 'binary' ) { |type,val|
|
||||
enctype = "m"
|
||||
if String === val
|
||||
val.gsub( /\s+/, '' ).unpack( enctype )[0]
|
||||
else
|
||||
raise YAML::Error, "Binary data must be represented by a string: " + val.inspect
|
||||
end
|
||||
}
|
||||
|
||||
#
|
||||
# Symbol#to_yaml
|
||||
#
|
||||
|
@ -451,14 +439,6 @@ class Time
|
|||
end
|
||||
end
|
||||
|
||||
YAML.add_builtin_type( 'time#ymd' ) { |type, val|
|
||||
if val =~ /\A(\d{4})\-(\d{1,2})\-(\d{1,2})\Z/
|
||||
Date.new($1.to_i, $2.to_i, $3.to_i)
|
||||
else
|
||||
raise YAML::TypeError, "Invalid !time string: " + val.inspect
|
||||
end
|
||||
}
|
||||
|
||||
#
|
||||
# Emit a Date object as a simple implicit
|
||||
#
|
||||
|
@ -493,40 +473,6 @@ class Numeric
|
|||
end
|
||||
end
|
||||
|
||||
YAML.add_builtin_type( 'float' ) { |type, val|
|
||||
if val =~ /\A[-+]?[\d][\d,]*\.[\d,]*[eE][-+][0-9]+\Z/ # Float (exponential)
|
||||
$&.tr( ',', '' ).to_f
|
||||
elsif val =~ /\A[-+]?[\d][\d,]*\.[\d,]*\Z/ # Float (fixed)
|
||||
$&.tr( ',', '' ).to_f
|
||||
elsif val =~ /\A([-+]?)\.(inf|Inf|INF)\Z/ # Float (english)
|
||||
( $1 == "-" ? -1.0/0.0 : 1.0/0.0 )
|
||||
elsif val =~ /\A\.(nan|NaN|NAN)\Z/
|
||||
0.0/0.0
|
||||
elsif type == :Implicit
|
||||
:InvalidType
|
||||
else
|
||||
val.to_f
|
||||
end
|
||||
}
|
||||
|
||||
YAML.add_builtin_type( 'int' ) { |type, val|
|
||||
if val =~ /\A[-+]?0[0-7,]+\Z/ # Integer (octal)
|
||||
$&.oct
|
||||
elsif val =~ /\A[-+]?0x[0-9a-fA-F,]+\Z/ # Integer (hex)
|
||||
$&.hex
|
||||
elsif val =~ /\A[-+]?\d[\d,]*\Z/ # Integer (canonical)
|
||||
$&.tr( ',', '' ).to_i
|
||||
elsif val =~ /\A([-+]?)(\d[\d,]*(?::[0-5]?[0-9])+)\Z/
|
||||
sign = ( $1 == '-' ? -1 : 1 )
|
||||
digits = $2.split( /:/ ).collect { |x| x.to_i }
|
||||
val = 0; digits.each { |x| val = ( val * 60 ) + x }; val *= sign
|
||||
elsif type == :Implicit
|
||||
:InvalidType
|
||||
else
|
||||
val.to_i
|
||||
end
|
||||
}
|
||||
|
||||
class TrueClass
|
||||
def is_complex_yaml?
|
||||
false
|
||||
|
@ -547,18 +493,6 @@ class FalseClass
|
|||
end
|
||||
end
|
||||
|
||||
YAML.add_builtin_type( 'bool' ) { |type, val|
|
||||
if val =~ /\A(\+|true|True|TRUE|yes|Yes|YES|on|On|ON)\Z/
|
||||
true
|
||||
elsif val =~ /\A(\-|false|False|FALSE|no|No|NO|off|Off|OFF)\Z/
|
||||
false
|
||||
elsif type == :Implicit
|
||||
:InvalidType
|
||||
else
|
||||
raise YAML::TypeError, "Invalid !bool string: " + val.inspect
|
||||
end
|
||||
}
|
||||
|
||||
class NilClass
|
||||
def is_complex_yaml?
|
||||
false
|
||||
|
@ -569,15 +503,3 @@ class NilClass
|
|||
end
|
||||
end
|
||||
|
||||
YAML.add_builtin_type( 'null' ) { |type, val|
|
||||
if val =~ /\A(\~|null|Null|NULL)\Z/
|
||||
nil
|
||||
elsif val.empty?
|
||||
nil
|
||||
elsif type == :Implicit
|
||||
:InvalidType
|
||||
else
|
||||
raise YAML::TypeError, "Invalid !null string: " + val.inspect
|
||||
end
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue