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
		Add a link
		
	
		Reference in a new issue