summaryrefslogtreecommitdiff
path: root/ext/syck/rubyext.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/syck/rubyext.c')
-rw-r--r--ext/syck/rubyext.c403
1 files changed, 230 insertions, 173 deletions
diff --git a/ext/syck/rubyext.c b/ext/syck/rubyext.c
index 012d727ce7..7e6d0e637e 100644
--- a/ext/syck/rubyext.c
+++ b/ext/syck/rubyext.c
@@ -1,3 +1,4 @@
+/* -*- indent-tabs-mode: nil -*-
/*
* rubyext.c
*
@@ -15,23 +16,23 @@
typedef struct RVALUE {
union {
#if 0
- struct {
- unsigned long flags; /* always 0 for freed obj */
- struct RVALUE *next;
- } free;
+ struct {
+ unsigned long flags; /* always 0 for freed obj */
+ struct RVALUE *next;
+ } free;
#endif
- struct RBasic basic;
- struct RObject object;
- struct RClass klass;
- /*struct RFloat flonum;*/
- /*struct RString string;*/
- struct RArray array;
- /*struct RRegexp regexp;*/
- struct RHash hash;
- /*struct RData data;*/
- struct RStruct rstruct;
- /*struct RBignum bignum;*/
- /*struct RFile file;*/
+ struct RBasic basic;
+ struct RObject object;
+ struct RClass klass;
+ /*struct RFloat flonum;*/
+ /*struct RString string;*/
+ struct RArray array;
+ /*struct RRegexp regexp;*/
+ struct RHash hash;
+ /*struct RData data;*/
+ struct RStruct rstruct;
+ /*struct RBignum bignum;*/
+ /*struct RFile file;*/
} as;
} RVALUE;
@@ -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;
@@ -85,7 +87,7 @@ struct parser_xtra {
*/
VALUE
rb_syck_compile(self, port)
- VALUE self, port;
+ VALUE self, port;
{
SYMID oid;
int taint;
@@ -94,7 +96,7 @@ rb_syck_compile(self, port)
bytestring_t *sav;
SyckParser *parser = syck_new_parser();
- taint = syck_parser_assign_io(parser, port);
+ taint = syck_parser_assign_io(parser, port);
syck_parser_handler( parser, syck_yaml2byte_handler );
syck_parser_error_handler( parser, NULL );
syck_parser_implicit_typing( parser, 0 );
@@ -151,14 +153,14 @@ rb_syck_io_str_read( char *buf, SyckIoStr *str, long max_size, long skip )
*/
int
syck_parser_assign_io(parser, port)
- SyckParser *parser;
- VALUE port;
+ SyckParser *parser;
+ VALUE port;
{
int taint = Qtrue;
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 );
+ taint = OBJ_TAINTED(port); /* original taintedness */
+ StringValue(port); /* possible conversion */
+ syck_parser_str( parser, RSTRING(port)->ptr, RSTRING(port)->len, NULL );
}
else if (rb_respond_to(port, s_read)) {
if (rb_respond_to(port, s_binmode)) {
@@ -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++ )
{
@@ -326,9 +333,9 @@ rb_syck_parse_handler(p, n)
bonus = (struct parser_xtra *)p->bonus;
if ( bonus->taint) OBJ_TAINT( obj );
- if ( bonus->proc != 0 ) rb_funcall(bonus->proc, s_call, 1, v);
+ 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;
}
@@ -341,10 +348,10 @@ VALUE
syck_merge_i( entry, hsh )
VALUE entry, hsh;
{
- if ( rb_obj_is_kind_of( entry, rb_cHash ) )
- {
- rb_funcall( hsh, s_update, 1, entry );
- }
+ if ( rb_obj_is_kind_of( entry, rb_cHash ) )
+ {
+ rb_funcall( hsh, s_update, 1, entry );
+ }
return Qnil;
}
@@ -360,12 +367,12 @@ rb_new_syck_node( obj, type_id )
if (rb_respond_to(obj, s_to_str))
{
- StringValue(obj); /* possible conversion */
+ 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 ) )
+ else if ( rb_obj_is_kind_of( obj, rb_cArray ) )
{
n = syck_alloc_seq();
for ( i = 0; i < RARRAY(obj)->len; i++ )
@@ -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 );
@@ -493,6 +527,14 @@ yaml_org_handler( n, ref )
ptr += 2;
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 );
}
@@ -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;
@@ -616,7 +669,7 @@ rb_syck_load_handler(p, n)
bonus = (struct parser_xtra *)p->bonus;
if ( bonus->taint) OBJ_TAINT( obj );
- if ( bonus->proc != 0 ) rb_funcall(bonus->proc, s_call, 1, obj);
+ if ( bonus->proc != 0 ) rb_funcall(bonus->proc, s_call, 1, obj);
rb_hash_aset(bonus->data, INT2FIX(RHASH(bonus->data)->tbl->num_entries), obj);
return obj;
@@ -662,21 +715,21 @@ rb_syck_bad_anchor_handler(p, a)
*/
void
syck_set_model( parser, input, model )
- SyckParser *parser;
- VALUE input, model;
+ SyckParser *parser;
+ VALUE input, model;
{
- if ( model == sym_generic )
- {
- syck_parser_handler( parser, rb_syck_parse_handler );
- syck_parser_implicit_typing( parser, 1 );
- syck_parser_taguri_expansion( parser, 1 );
- }
- else
- {
- syck_parser_handler( parser, rb_syck_load_handler );
- syck_parser_implicit_typing( parser, 1 );
- syck_parser_taguri_expansion( parser, 0 );
- }
+ if ( model == sym_generic )
+ {
+ syck_parser_handler( parser, rb_syck_parse_handler );
+ syck_parser_implicit_typing( parser, 1 );
+ syck_parser_taguri_expansion( parser, 1 );
+ }
+ else
+ {
+ syck_parser_handler( parser, rb_syck_load_handler );
+ syck_parser_implicit_typing( parser, 1 );
+ syck_parser_taguri_expansion( parser, 0 );
+ }
if ( input == sym_bytecode )
{
syck_parser_set_input_type( parser, syck_bytecode_utf8 );
@@ -703,13 +756,13 @@ VALUE
syck_parser_new(argc, argv, class)
int argc;
VALUE *argv;
- VALUE class;
+ VALUE class;
{
- VALUE pobj, options, init_argv[1];
+ VALUE pobj, options, init_argv[1];
SyckParser *parser = syck_new_parser();
rb_scan_args(argc, argv, "01", &options);
- pobj = Data_Wrap_Struct( class, syck_mark_parser, syck_free_parser, parser );
+ pobj = Data_Wrap_Struct( class, syck_mark_parser, syck_free_parser, parser );
syck_parser_set_root_on_error( parser, Qnil );
@@ -717,9 +770,9 @@ syck_parser_new(argc, argv, class)
{
options = rb_hash_new();
}
- init_argv[0] = options;
- rb_obj_call_init(pobj, 1, init_argv);
- return pobj;
+ init_argv[0] = options;
+ rb_obj_call_init(pobj, 1, init_argv);
+ return pobj;
}
/*
@@ -729,8 +782,8 @@ static VALUE
syck_parser_initialize( self, options )
VALUE self, options;
{
- rb_iv_set(self, "@options", options);
- return self;
+ rb_ivar_set(self, s_options, options);
+ return self;
}
/*
@@ -740,13 +793,13 @@ static VALUE
syck_parser_bufsize_set( self, size )
VALUE self, size;
{
- SyckParser *parser;
+ SyckParser *parser;
- Data_Get_Struct(self, SyckParser, parser);
+ Data_Get_Struct(self, SyckParser, parser);
if ( rb_respond_to( size, s_to_i ) ) {
parser->bufsize = NUM2INT(rb_funcall(size, s_to_i, 0));
}
- return self;
+ return self;
}
/*
@@ -756,10 +809,10 @@ static VALUE
syck_parser_bufsize_get( self )
VALUE self;
{
- SyckParser *parser;
+ SyckParser *parser;
- Data_Get_Struct(self, SyckParser, parser);
- return INT2FIX( parser->bufsize );
+ Data_Get_Struct(self, SyckParser, parser);
+ return INT2FIX( parser->bufsize );
}
/*
@@ -769,26 +822,26 @@ VALUE
syck_parser_load(argc, argv, self)
int argc;
VALUE *argv;
- VALUE self;
+ VALUE self;
{
VALUE port, proc, model, input;
- SyckParser *parser;
+ SyckParser *parser;
struct parser_xtra bonus;
volatile VALUE hash; /* protect from GC */
rb_scan_args(argc, argv, "11", &port, &proc);
- Data_Get_Struct(self, SyckParser, parser);
+ 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 );
- syck_set_model( parser, input, 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);
+ bonus.taint = syck_parser_assign_io(parser, port);
bonus.data = hash = rb_hash_new();
- if ( NIL_P( proc ) ) bonus.proc = 0;
+ if ( NIL_P( proc ) ) bonus.proc = 0;
else bonus.proc = proc;
-
- parser->bonus = (void *)&bonus;
+
+ parser->bonus = (void *)&bonus;
return syck_parse( parser );
}
@@ -800,38 +853,38 @@ VALUE
syck_parser_load_documents(argc, argv, self)
int argc;
VALUE *argv;
- VALUE self;
+ VALUE self;
{
VALUE port, proc, v, input, model;
- SyckParser *parser;
+ SyckParser *parser;
struct parser_xtra bonus;
volatile VALUE hash;
rb_scan_args(argc, argv, "1&", &port, &proc);
- Data_Get_Struct(self, SyckParser, parser);
+ 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 );
- syck_set_model( parser, input, 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);
+ bonus.taint = syck_parser_assign_io(parser, port);
while ( 1 )
- {
+ {
/* Reset hash for tracking nodes */
bonus.data = hash = rb_hash_new();
bonus.proc = 0;
parser->bonus = (void *)&bonus;
/* Parse a document */
- v = syck_parse( parser );
+ v = syck_parse( parser );
if ( parser->eof == 1 )
{
break;
}
/* Pass document to block */
- rb_funcall( proc, s_call, 1, v );
- }
+ rb_funcall( proc, s_call, 1, v );
+ }
return Qnil;
}
@@ -845,15 +898,15 @@ 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());
- return self;
+ return self;
}
/*
@@ -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;
}
@@ -965,15 +1018,15 @@ transfer_find_i(entry, col)
{
VALUE key = rb_ary_entry( entry, 0 );
VALUE tid = rb_ary_entry( col, 0 );
- if ( rb_respond_to( key, s_match ) )
- {
- VALUE match = rb_funcall( key, rb_intern("match"), 1, tid );
- if ( ! NIL_P( match ) )
- {
- rb_ary_push( col, rb_ary_entry( entry, 1 ) );
- rb_iter_break();
- }
- }
+ if ( rb_respond_to( key, s_match ) )
+ {
+ VALUE match = rb_funcall( key, rb_intern("match"), 1, tid );
+ if ( ! NIL_P( match ) )
+ {
+ rb_ary_push( col, rb_ary_entry( entry, 1 ) );
+ rb_iter_break();
+ }
+ }
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();
@@ -1215,9 +1268,9 @@ VALUE
syck_emitter_new(argc, argv, class)
int argc;
VALUE *argv;
- VALUE class;
+ VALUE class;
{
- VALUE pobj, options, init_argv[1];
+ VALUE pobj, options, init_argv[1];
SyckEmitter *emitter = syck_new_emitter();
syck_emitter_ignore_id( emitter, Qnil );
syck_emitter_handler( emitter, rb_syck_output_handler );
@@ -1225,15 +1278,15 @@ syck_emitter_new(argc, argv, class)
emitter->bonus = (void *)rb_str_new2( "" );
rb_scan_args(argc, argv, "01", &options);
- pobj = Data_Wrap_Struct( class, syck_mark_emitter, syck_free_emitter, emitter );
+ pobj = Data_Wrap_Struct( class, syck_mark_emitter, syck_free_emitter, emitter );
if ( ! rb_obj_is_instance_of( options, rb_cHash ) )
{
options = rb_hash_new();
}
- init_argv[0] = options;
- rb_obj_call_init(pobj, 1, init_argv);
- return pobj;
+ init_argv[0] = options;
+ rb_obj_call_init(pobj, 1, init_argv);
+ return pobj;
}
/*
@@ -1243,8 +1296,8 @@ static VALUE
syck_emitter_initialize( self, options )
VALUE self, options;
{
- rb_iv_set(self, "@options", options);
- return self;
+ rb_ivar_set(self, s_options, options);
+ return self;
}
/*
@@ -1256,7 +1309,7 @@ syck_emitter_level_m( self )
{
SyckEmitter *emitter;
- Data_Get_Struct(self, SyckEmitter, emitter);
+ Data_Get_Struct(self, SyckEmitter, emitter);
return LONG2NUM( emitter->level );
}
@@ -1269,7 +1322,7 @@ syck_emitter_flush_m( self )
{
SyckEmitter *emitter;
- Data_Get_Struct(self, SyckEmitter, emitter);
+ Data_Get_Struct(self, SyckEmitter, emitter);
syck_emitter_flush( emitter, 0 );
return self;
}
@@ -1283,7 +1336,7 @@ syck_emitter_write_m( self, str )
{
SyckEmitter *emitter;
- Data_Get_Struct(self, SyckEmitter, emitter);
+ Data_Get_Struct(self, SyckEmitter, emitter);
syck_emitter_write( emitter, RSTRING(str)->ptr, RSTRING(str)->len );
return self;
}
@@ -1297,7 +1350,7 @@ syck_emitter_simple_write( self, str )
{
SyckEmitter *emitter;
- Data_Get_Struct(self, SyckEmitter, emitter);
+ Data_Get_Struct(self, SyckEmitter, emitter);
syck_emitter_simple( emitter, RSTRING(str)->ptr, RSTRING(str)->len );
return self;
}
@@ -1312,7 +1365,7 @@ syck_emitter_start_object( self, oid )
char *anchor_name;
SyckEmitter *emitter;
- Data_Get_Struct(self, SyckEmitter, emitter);
+ Data_Get_Struct(self, SyckEmitter, emitter);
anchor_name = syck_emitter_start_obj( emitter, oid );
if ( anchor_name == NULL )
@@ -1332,7 +1385,7 @@ syck_emitter_end_object( self )
{
SyckEmitter *emitter;
- Data_Get_Struct(self, SyckEmitter, emitter);
+ Data_Get_Struct(self, SyckEmitter, emitter);
syck_emitter_end_obj( emitter );
if ( emitter->level < 0 )
@@ -1353,9 +1406,9 @@ Init_syck()
rb_define_const( rb_syck, "VERSION", rb_str_new2( SYCK_VERSION ) );
rb_define_module_function( rb_syck, "compile", rb_syck_compile, 1 );
- /*
- * Global symbols
- */
+ /*
+ * Global symbols
+ */
s_new = rb_intern("new");
s_utc = rb_intern("utc");
s_at = rb_intern("at");
@@ -1366,30 +1419,34 @@ Init_syck()
s_binmode = rb_intern("binmode");
s_transfer = rb_intern("transfer");
s_call = rb_intern("call");
- s_update = rb_intern("update");
- s_dup = rb_intern("dup");
+ s_update = rb_intern("update");
+ s_dup = rb_intern("dup");
s_default_set = rb_intern("default=");
- s_match = rb_intern("match");
- s_keys = rb_intern("keys");
- s_to_str = rb_intern("to_str");
- s_tr_bang = rb_intern("tr!");
+ 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"));
- sym_input = ID2SYM(rb_intern("Input"));
- sym_bytecode = ID2SYM(rb_intern("Bytecode"));
+ 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"));
+ sym_bytecode = ID2SYM(rb_intern("Bytecode"));
sym_map = ID2SYM(rb_intern("map"));
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
*/
cLoader = rb_define_class_under( rb_syck, "Loader", rb_cObject );
@@ -1414,7 +1471,7 @@ Init_syck()
*/
cParser = rb_define_class_under( rb_syck, "Parser", rb_cObject );
rb_define_attr( cParser, "options", 1, 1 );
- rb_define_singleton_method( cParser, "new", syck_parser_new, -1 );
+ rb_define_singleton_method( cParser, "new", syck_parser_new, -1 );
rb_define_method(cParser, "initialize", syck_parser_initialize, 1);
rb_define_method(cParser, "load", syck_parser_load, -1);
rb_define_method(cParser, "load_documents", syck_parser_load_documents, -1);
@@ -1454,21 +1511,21 @@ Init_syck()
rb_define_attr( cBadAlias, "name", 1, 1 );
rb_define_method( cBadAlias, "initialize", syck_badalias_initialize, 1);
- /*
- * Define YAML::Syck::MergeKey class
- */
- cMergeKey = rb_define_class_under( rb_syck, "MergeKey", rb_cObject );
+ /*
+ * Define YAML::Syck::MergeKey class
+ */
+ cMergeKey = rb_define_class_under( rb_syck, "MergeKey", rb_cObject );
- /*
- * Define YAML::Syck::DefaultKey class
- */
- cDefaultKey = rb_define_class_under( rb_syck, "DefaultKey", rb_cObject );
+ /*
+ * Define YAML::Syck::DefaultKey class
+ */
+ cDefaultKey = rb_define_class_under( rb_syck, "DefaultKey", rb_cObject );
/*
* Define YAML::Syck::Emitter class
*/
cEmitter = rb_define_class_under( rb_syck, "Emitter", rb_cObject );
- rb_define_singleton_method( cEmitter, "new", syck_emitter_new, -1 );
+ rb_define_singleton_method( cEmitter, "new", syck_emitter_new, -1 );
rb_define_method( cEmitter, "initialize", syck_emitter_initialize, 1 );
rb_define_method( cEmitter, "level", syck_emitter_level_m, 0 );
rb_define_method( cEmitter, "write", syck_emitter_write_m, 1 );