1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* ext/syck/syck.h: version 0.43.

* ext/syck/lib/gram.c: allow root-level inline collections.
 [ruby-talk:94922]

* lib/yaml/rubytypes.rb (Symbol#to_yaml): emit symbols as implicits.
 [ruby-talk:94930]

* ext/syck/bytecode.c: turn off default implicit typing.

* ext/syck/implicit.c: detect base60 integers.

* ext/syck/rubyext.c: handle base60, as well as hex and octal
  with commas.  implicit typing of ruby symbols.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@6083 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
why 2004-04-03 08:13:22 +00:00
parent 7c67e3f978
commit 1ba2a61687
8 changed files with 1762 additions and 1601 deletions

View file

@ -1,3 +1,20 @@
Sat Apr 3 17:11:05 2004 why the lucky stiff <why@ruby-lang.org>
* ext/syck/syck.h: version 0.43.
* ext/syck/lib/gram.c: allow root-level inline collections.
[ruby-talk:94922]
* lib/yaml/rubytypes.rb (Symbol#to_yaml): emit symbols as implicits.
[ruby-talk:94930]
* ext/syck/bytecode.c: turn off default implicit typing.
* ext/syck/implicit.c: detect base60 integers.
* ext/syck/rubyext.c: handle base60, as well as hex and octal
with commas. implicit typing of ruby symbols.
Thu Apr 1 19:58:37 2004 NAKAMURA, Hiroshi <nakahiro@sarion.co.jp>
* lib/soap/mapping/{factory.rb,registry.rb}: fixed illegal mapped URI

View file

@ -1,4 +1,4 @@
/* Generated by re2c 0.5 on Sun Nov 23 14:51:02 2003 */
/* Generated by re2c 0.5 on Mon Jan 12 11:40:10 2004 */
#line 1 "bytecode.re"
/*
* bytecode.re
@ -510,7 +510,7 @@ yy44: yych = *++YYCURSOR;
Directive:
{
YYTOKTMP = YYCURSOR;
YYTOKEN = YYCURSOR;
{
YYCTYPE yych;
@ -611,7 +611,7 @@ yy48: yyaccept = 0;
}
yy49:
#line 400
{ YYCURSOR = YYTOKTMP;
{ YYCURSOR = YYTOKEN;
return YAML_DOCSEP;
}
yy50: yych = *++YYCURSOR;
@ -876,7 +876,7 @@ yy58: yych = *++YYCURSOR;
Comment:
{
YYTOKTMP = YYCURSOR;
YYTOKEN = YYCURSOR;
{
YYCTYPE yych;

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,3 +1,4 @@
/* -*- indent-tabs-mode: nil -*-
/*
* rubyext.c
*
@ -49,6 +50,7 @@ typedef struct {
* symbols and constants
*/
static ID s_new, s_utc, s_at, s_to_f, s_to_i, s_read, s_binmode, s_call, s_transfer, s_update, s_dup, s_match, s_keys, s_to_str, s_unpack, s_tr_bang, s_anchors, s_default_set;
static ID s_anchors, s_domain, s_families, s_kind, s_name, s_options, s_private_types, s_type_id, s_value;
static VALUE sym_model, sym_generic, sym_input, sym_bytecode;
static VALUE sym_scalar, sym_seq, sym_map;
VALUE cDate, cParser, cLoader, cNode, cPrivateType, cDomainType, cBadAlias, cDefaultKey, cMergeKey, cEmitter;
@ -197,7 +199,8 @@ rb_syck_mktime(str)
{
VALUE time;
char *ptr = str;
VALUE year, mon, day, hour, min, sec, usec;
VALUE year, mon, day, hour, min, sec;
long usec;
/* Year*/
ptr[4] = '\0';
@ -232,23 +235,23 @@ rb_syck_mktime(str)
ptr += 2;
if ( *ptr == '.' )
{
usec = INT2FIX( strtod( ptr, NULL ) * 1000000 );
char *padded = syck_strndup( "000000", 6 );
char *end = ptr + 1;
while ( isdigit( *end ) ) end++;
MEMCPY(padded, ptr + 1, char, end - (ptr + 1));
usec = strtol(padded, NULL, 10);
}
else
{
usec = INT2FIX( 0 );
usec = 0;
}
/* Make UTC time*/
time = rb_funcall(rb_cTime, s_utc, 7, year, mon, day, hour, min, sec, usec);
/* Time Zone*/
while ( *ptr != 'Z' && *ptr != '+' && *ptr != '-' && *ptr != '\0' ) ptr++;
if ( *ptr == '-' || *ptr == '+' )
{
double tz_offset = 0;
double utc_time = 0;
tz_offset += strtod(ptr, NULL) * 3600;
time_t tz_offset = strtol(ptr, NULL, 10) * 3600;
time_t tmp;
while ( *ptr != ':' && *ptr != '\0' ) ptr++;
if ( *ptr == ':' )
@ -256,21 +259,25 @@ rb_syck_mktime(str)
ptr += 1;
if ( tz_offset < 0 )
{
tz_offset -= strtod(ptr, NULL) * 60;
tz_offset -= strtol(ptr, NULL, 10) * 60;
}
else
{
tz_offset += strtod(ptr, NULL) * 60;
tz_offset += strtol(ptr, NULL, 10) * 60;
}
}
/* Make TZ time*/
utc_time = NUM2DBL(rb_funcall(time, s_to_f, 0));
utc_time -= tz_offset;
time = rb_funcall(rb_cTime, s_at, 1, rb_float_new(utc_time));
time = rb_funcall(rb_cTime, s_utc, 6, year, mon, day, hour, min, sec);
tmp = NUM2LONG(rb_funcall(time, s_to_i, 0)) - tz_offset;
return rb_funcall(rb_cTime, s_at, 2, LONG2NUM(tmp), LONG2NUM(usec));
}
else
{
/* Make UTC time*/
return rb_funcall(rb_cTime, s_utc, 7, year, mon, day, hour, min, sec, LONG2NUM(usec));
return time;
}
}
/*
@ -290,18 +297,18 @@ rb_syck_parse_handler(p, n)
if ( n->type_id != NULL )
{
t = rb_str_new2(n->type_id);
rb_iv_set(obj, "@type_id", t);
rb_ivar_set(obj, s_type_id, t);
}
switch (n->kind)
{
case syck_str_kind:
rb_iv_set(obj, "@kind", sym_scalar);
rb_ivar_set(obj, s_kind, sym_scalar);
v = rb_str_new( n->data.str->ptr, n->data.str->len );
break;
case syck_seq_kind:
rb_iv_set(obj, "@kind", sym_seq);
rb_ivar_set(obj, s_kind, sym_seq);
v = rb_ary_new2( n->data.list->idx );
for ( i = 0; i < n->data.list->idx; i++ )
{
@ -310,7 +317,7 @@ rb_syck_parse_handler(p, n)
break;
case syck_map_kind:
rb_iv_set(obj, "@kind", sym_map);
rb_ivar_set(obj, s_kind, sym_map);
v = rb_hash_new();
for ( i = 0; i < n->data.pairs->idx; i++ )
{
@ -328,7 +335,7 @@ rb_syck_parse_handler(p, n)
if ( bonus->taint) OBJ_TAINT( obj );
if ( bonus->proc != 0 ) rb_funcall(bonus->proc, s_call, 1, v);
rb_iv_set(obj, "@value", v);
rb_ivar_set(obj, s_value, v);
rb_hash_aset(bonus->data, INT2FIX(RHASH(bonus->data)->tbl->num_entries), obj);
return obj;
}
@ -411,7 +418,7 @@ yaml_org_handler( n, ref )
{
case syck_str_kind:
transferred = 1;
if ( type_id == NULL || strcmp( type_id, "str" ) == 0 )
if ( type_id == NULL )
{
obj = rb_str_new( n->data.str->ptr, n->data.str->len );
}
@ -437,12 +444,39 @@ yaml_org_handler( n, ref )
}
else if ( strcmp( type_id, "int#hex" ) == 0 )
{
syck_str_blow_away_commas( n );
obj = rb_cstr2inum( n->data.str->ptr, 16 );
}
else if ( strcmp( type_id, "int#oct" ) == 0 )
{
syck_str_blow_away_commas( n );
obj = rb_cstr2inum( n->data.str->ptr, 8 );
}
else if ( strcmp( type_id, "int#base60" ) == 0 )
{
char *ptr, *end;
long sixty = 1;
long total = 0;
syck_str_blow_away_commas( n );
ptr = n->data.str->ptr;
end = n->data.str->ptr + n->data.str->len;
while ( end > ptr )
{
long bnum = 0;
char *colon = end - 1;
while ( colon >= ptr && *colon != ':' )
{
colon--;
}
if ( *colon == ':' ) *colon = '\0';
bnum = strtol( colon + 1, NULL, 10 );
total += bnum * sixty;
sixty *= 60;
end = colon;
}
obj = INT2FIX(total);
}
else if ( strncmp( type_id, "int", 3 ) == 0 )
{
syck_str_blow_away_commas( n );
@ -494,6 +528,14 @@ yaml_org_handler( n, ref )
while ( !ISDIGIT( *ptr ) ) ptr++;
day = INT2FIX(strtol(ptr, NULL, 10));
if ( !cDate ) {
/*
* Load Date module
*/
rb_require( "date" );
cDate = rb_const_get( rb_cObject, rb_intern("Date") );
}
obj = rb_funcall( cDate, s_new, 3, year, mon, day );
}
else if ( strncmp( type_id, "timestamp", 9 ) == 0 )
@ -508,6 +550,17 @@ yaml_org_handler( n, ref )
{
obj = rb_funcall( cDefaultKey, s_new, 0 );
}
else if ( strncmp( n->data.str->ptr, ":", 1 ) == 0 )
{
char *tmp;
tmp = syck_strndup( n->data.str->ptr + 1, n->data.str->len - 1 );
obj = ID2SYM( rb_intern( tmp ) );
free( tmp );
}
else if ( strcmp( type_id, "str" ) == 0 )
{
obj = rb_str_new( n->data.str->ptr, n->data.str->len );
}
else
{
transferred = 0;
@ -729,7 +782,7 @@ static VALUE
syck_parser_initialize( self, options )
VALUE self, options;
{
rb_iv_set(self, "@options", options);
rb_ivar_set(self, s_options, options);
return self;
}
@ -779,8 +832,8 @@ syck_parser_load(argc, argv, self)
rb_scan_args(argc, argv, "11", &port, &proc);
Data_Get_Struct(self, SyckParser, parser);
input = rb_hash_aref( rb_iv_get( self, "@options" ), sym_input );
model = rb_hash_aref( rb_iv_get( self, "@options" ), sym_model );
input = rb_hash_aref( rb_attr_get( self, s_options ), sym_input );
model = rb_hash_aref( rb_attr_get( self, s_options ), sym_model );
syck_set_model( parser, input, model );
bonus.taint = syck_parser_assign_io(parser, port);
@ -810,8 +863,8 @@ syck_parser_load_documents(argc, argv, self)
rb_scan_args(argc, argv, "1&", &port, &proc);
Data_Get_Struct(self, SyckParser, parser);
input = rb_hash_aref( rb_iv_get( self, "@options" ), sym_input );
model = rb_hash_aref( rb_iv_get( self, "@options" ), sym_model );
input = rb_hash_aref( rb_attr_get( self, s_options ), sym_input );
model = rb_hash_aref( rb_attr_get( self, s_options ), sym_model );
syck_set_model( parser, input, model );
bonus.taint = syck_parser_assign_io(parser, port);
@ -845,10 +898,10 @@ syck_loader_initialize( self )
{
VALUE families;
rb_iv_set(self, "@families", rb_hash_new() );
rb_iv_set(self, "@private_types", rb_hash_new() );
rb_iv_set(self, "@anchors", rb_hash_new() );
families = rb_iv_get(self, "@families");
families = rb_hash_new();
rb_ivar_set(self, s_families, families);
rb_ivar_set(self, s_private_types, rb_hash_new());
rb_ivar_set(self, s_anchors, rb_hash_new());
rb_hash_aset(families, rb_str_new2( YAML_DOMAIN ), rb_hash_new());
rb_hash_aset(families, rb_str_new2( RUBY_DOMAIN ), rb_hash_new());
@ -865,7 +918,7 @@ syck_loader_add_type_family( self, domain, type_re, proc )
{
VALUE families, domain_types;
families = rb_iv_get(self, "@families");
families = rb_attr_get(self, s_families);
domain_types = syck_get_hash_aref(families, domain);
rb_hash_aset( domain_types, type_re, proc );
return Qnil;
@ -933,7 +986,7 @@ syck_loader_add_private_type( argc, argv, self )
rb_scan_args(argc, argv, "1&", &type_re, &proc);
priv_types = rb_iv_get(self, "@private_types");
priv_types = rb_attr_get(self, s_private_types);
rb_hash_aset( priv_types, type_re, proc );
return Qnil;
}
@ -1018,13 +1071,13 @@ syck_loader_transfer( self, type, val )
if ( rb_str_cmp( scheme, str_xprivate ) == 0 )
{
name = rb_ary_join( parts, rb_str_new2( ":" ) );
type_hash = rb_iv_get(self, "@private_types");
type_hash = rb_attr_get(self, s_private_types);
}
else if ( rb_str_cmp( scheme, str_taguri ) == 0 )
{
domain = rb_ary_shift( parts );
name = rb_ary_join( parts, rb_str_new2( ":" ) );
type_hash = rb_iv_get(self, "@families");
type_hash = rb_attr_get(self, s_families);
type_hash = rb_hash_aref(type_hash, domain);
/*
@ -1089,7 +1142,7 @@ VALUE
syck_badalias_initialize( self, val )
VALUE self, val;
{
rb_iv_set( self, "@name", val );
rb_ivar_set( self, s_name, val );
return self;
}
@ -1100,9 +1153,9 @@ VALUE
syck_domaintype_initialize( self, domain, type_id, val )
VALUE self, type_id, val;
{
rb_iv_set( self, "@domain", domain );
rb_iv_set( self, "@type_id", type_id );
rb_iv_set( self, "@value", val );
rb_ivar_set( self, s_domain, domain );
rb_ivar_set( self, s_type_id, type_id );
rb_ivar_set( self, s_value, val );
return self;
}
@ -1113,8 +1166,8 @@ VALUE
syck_privatetype_initialize( self, type_id, val )
VALUE self, type_id, val;
{
rb_iv_set( self, "@type_id", type_id );
rb_iv_set( self, "@value", val );
rb_ivar_set( self, s_type_id, type_id );
rb_ivar_set( self, s_value, val );
return self;
}
@ -1125,8 +1178,8 @@ VALUE
syck_node_initialize( self, type_id, val )
VALUE self, type_id, val;
{
rb_iv_set( self, "@type_id", type_id );
rb_iv_set( self, "@value", val );
rb_ivar_set( self, s_type_id, type_id );
rb_ivar_set( self, s_value, val );
return self;
}
@ -1158,8 +1211,8 @@ syck_node_transform( self )
VALUE self;
{
VALUE t = Qnil;
VALUE type_id = rb_iv_get( self, "@type_id" );
VALUE val = rb_iv_get( self, "@value" );
VALUE type_id = rb_attr_get( self, s_type_id );
VALUE val = rb_attr_get( self, s_value );
if ( rb_obj_is_instance_of( val, rb_cHash ) )
{
t = rb_hash_new();
@ -1243,7 +1296,7 @@ static VALUE
syck_emitter_initialize( self, options )
VALUE self, options;
{
rb_iv_set(self, "@options", options);
rb_ivar_set(self, s_options, options);
return self;
}
@ -1375,6 +1428,16 @@ Init_syck()
s_tr_bang = rb_intern("tr!");
s_unpack = rb_intern("unpack");
s_anchors = rb_intern("@anchors");
s_domain = rb_intern("@domain");
s_families = rb_intern("@families");
s_kind = rb_intern("@kind");
s_name = rb_intern("@name");
s_options = rb_intern("@options");
s_private_types = rb_intern("@private_types");
s_type_id = rb_intern("@type_id");
s_value = rb_intern("@value");
sym_model = ID2SYM(rb_intern("Model"));
sym_generic = ID2SYM(rb_intern("Generic"));
sym_input = ID2SYM(rb_intern("Input"));
@ -1383,12 +1446,6 @@ Init_syck()
sym_scalar = ID2SYM(rb_intern("scalar"));
sym_seq = ID2SYM(rb_intern("seq"));
/*
* Load Date module
*/
rb_require( "date" );
cDate = rb_funcall( rb_cObject, rb_intern("const_get"), 1, rb_str_new2("Date") );
/*
* Define YAML::Syck::Loader class
*/

View file

@ -13,7 +13,7 @@
#define SYCK_YAML_MAJOR 1
#define SYCK_YAML_MINOR 0
#define SYCK_VERSION "0.42"
#define SYCK_VERSION "0.43"
#define YAML_DOMAIN "yaml.org,2002"
#include <stdio.h>

View file

@ -87,6 +87,17 @@ module YAML
return d
end
#
# Dump documents to a stream
#
def YAML.dump_stream( *objs )
d = YAML::Stream.new
objs.each do |doc|
d.add( doc )
end
d.emit
end
#
# Add a transfer method to a domain
#
@ -215,9 +226,14 @@ module Kernel
# ryan:: Either way, I certainly will have a pony parade.
#
def y( x )
puts x.to_yaml
def y( *x )
puts( if x.length == 1
YAML::dump( *x )
else
YAML::dump_stream( *x )
end )
end
private :y
end

View file

@ -327,7 +327,7 @@ class Symbol
end
def to_yaml( opts = {} )
YAML::quick_emit( nil, opts ) { |out|
out << "!ruby/sym "
out << ":"
self.id2name.to_yaml( :Emitter => out )
}
end
@ -353,7 +353,7 @@ class Range
def to_yaml( opts = {} )
YAML::quick_emit( nil, opts ) { |out|
out << "!ruby/range "
self.inspect.to_yaml( :Emitter => out )
self.to_s.to_yaml(:Emitter => out)
}
end
end