git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4037 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2003-07-04 12:51:42 +00:00
Родитель c3c3102610
Коммит a4aa765cb6
4 изменённых файлов: 137 добавлений и 121 удалений

Просмотреть файл

@ -14,22 +14,24 @@
typedef struct RVALUE {
union {
//struct {
// unsigned long flags; /* always 0 for freed obj */
// struct RVALUE *next;
//} free;
#if 0
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 RFloat flonum;*/
/*struct RString string;*/
struct RArray array;
//struct RRegexp regexp;
/*struct RRegexp regexp;*/
struct RHash hash;
//struct RData data;
/*struct RData data;*/
struct RStruct rstruct;
//struct RBignum bignum;
//struct RFile file;
/*struct RBignum bignum;*/
/*struct RFile file;*/
} as;
} RVALUE;
@ -57,7 +59,7 @@ void rb_syck_err_handler _((SyckParser *, char *));
SyckNode * rb_syck_bad_anchor_handler _((SyckParser *, char *));
struct parser_xtra {
VALUE data; // Borrowed this idea from marshal.c to fix [ruby-core:8067] problem
VALUE data; /* Borrowed this idea from marshal.c to fix [ruby-core:8067] problem */
VALUE proc;
};
@ -75,9 +77,9 @@ rb_syck_io_str_read( char *buf, SyckIoStr *str, long max_size, long skip )
if ( max_size > 0 )
{
//
// call io#read.
//
/*
* call io#read.
*/
VALUE src = (VALUE)str->ptr;
VALUE n = LONG2NUM(max_size);
VALUE str = rb_funcall2(src, s_read, 1, &n);
@ -101,16 +103,20 @@ syck_parser_assign_io(parser, port)
VALUE port;
{
if (rb_respond_to(port, rb_intern("to_str"))) {
//arg.taint = OBJ_TAINTED(port); /* original taintedness */
//StringValue(port); /* possible conversion */
#if 0
arg.taint = OBJ_TAINTED(port); /* original taintedness */
StringValue(port); /* possible conversion */
#endif
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)) {
rb_funcall2(port, s_binmode, 0, 0);
}
//arg.taint = Qfalse;
syck_parser_str( parser, (char *)port, 0, rb_syck_io_str_read );
#if 0
arg.taint = Qfalse;
#endif
syck_parser_str( parser, (char *)port, 0, rb_syck_io_str_read );
}
else {
rb_raise(rb_eTypeError, "instance of IO needed");
@ -144,36 +150,36 @@ rb_syck_mktime(str)
char *ptr = str;
VALUE year, mon, day, hour, min, sec, usec;
// Year
/* Year*/
ptr[4] = '\0';
year = INT2FIX(strtol(ptr, NULL, 10));
// Month
/* Month*/
ptr += 4;
while ( !isdigit( *ptr ) ) ptr++;
mon = INT2FIX(strtol(ptr, NULL, 10));
// Day
/* Day*/
ptr += 2;
while ( !isdigit( *ptr ) ) ptr++;
day = INT2FIX(strtol(ptr, NULL, 10));
// Hour
/* Hour*/
ptr += 2;
while ( !isdigit( *ptr ) ) ptr++;
hour = INT2FIX(strtol(ptr, NULL, 10));
// Minute
/* Minute */
ptr += 2;
while ( !isdigit( *ptr ) ) ptr++;
min = INT2FIX(strtol(ptr, NULL, 10));
// Second
/* Second */
ptr += 2;
while ( !isdigit( *ptr ) ) ptr++;
sec = INT2FIX(strtol(ptr, NULL, 10));
// Millisecond
/* Millisecond */
ptr += 2;
if ( *ptr == '.' )
{
@ -184,10 +190,10 @@ rb_syck_mktime(str)
usec = INT2FIX( 0 );
}
// Make UTC time
/* Make UTC time*/
time = rb_funcall(rb_cTime, s_utc, 7, year, mon, day, hour, min, sec, usec);
// Time Zone
/* Time Zone*/
while ( *ptr != 'Z' && *ptr != '+' && *ptr != '-' && *ptr != '\0' ) ptr++;
if ( *ptr == '-' || *ptr == '+' )
{
@ -209,7 +215,7 @@ rb_syck_mktime(str)
}
}
// Make TZ time
/* 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));
@ -374,16 +380,16 @@ rb_syck_load_handler(p, n)
char *ptr = n->data.str->ptr;
VALUE year, mon, day;
// Year
/* Year*/
ptr[4] = '\0';
year = INT2FIX(strtol(ptr, NULL, 10));
// Month
/* Month*/
ptr += 4;
while ( !isdigit( *ptr ) ) ptr++;
mon = INT2FIX(strtol(ptr, NULL, 10));
// Day
/* Day*/
ptr += 2;
while ( !isdigit( *ptr ) ) ptr++;
day = INT2FIX(strtol(ptr, NULL, 10));
@ -422,9 +428,9 @@ rb_syck_load_handler(p, n)
VALUE v = syck_map_read( n, map_value, i );
int merge_key = 0;
//
// Handle merge keys
//
/*
* Handle merge keys
*/
if ( rb_obj_is_kind_of( k, cMergeKey ) )
{
if ( rb_obj_is_kind_of( v, rb_cHash ) )
@ -458,9 +464,9 @@ rb_syck_load_handler(p, n)
break;
}
//
// ID already set, let's alter the symbol table to accept the new object
//
/*
* ID already set, let's alter the symbol table to accept the new object
*/
if (n->id > 0)
{
MEMCPY((void *)n->id, (void *)obj, RVALUE, 1);
@ -631,7 +637,9 @@ syck_parser_load(argc, argv, self)
parser->bonus = (void *)&bonus;
//v = rb_ensure(rb_run_syck_parse, (VALUE)&parser, rb_syck_ensure, (VALUE)&parser);
#if 0
v = rb_ensure(rb_run_syck_parse, (VALUE)&parser, rb_syck_ensure, (VALUE)&parser);
#endif
return syck_parse( parser );
}
@ -827,12 +835,15 @@ syck_loader_transfer( self, type, val )
{
char *taguri = NULL;
// rb_funcall(rb_mKernel, rb_intern("p"), 2, rb_str_new2( "-- TYPE --" ), type);
#if 0
rb_p(rb_str_new2( "-- TYPE --" ));
rb_p(type);
#endif
if (NIL_P(type) || !RSTRING(type)->ptr || RSTRING(type)->len == 0)
{
//
// Empty transfer, detect type
//
/*
* Empty transfer, detect type
*/
if ( TYPE(val) == T_STRING )
{
taguri = syck_match_implicit( RSTRING(val)->ptr, RSTRING(val)->len );
@ -851,7 +862,9 @@ syck_loader_transfer( self, type, val )
VALUE str_taguri = rb_str_new2("taguri");
VALUE str_xprivate = rb_str_new2("x-private");
VALUE parts = rb_str_split( type_uri, ":" );
// rb_funcall(rb_mKernel, rb_intern("p"), 1, parts);
#if 0
rb_p(parts);
#endif
scheme = rb_ary_shift( parts );
@ -884,7 +897,10 @@ syck_loader_transfer( self, type, val )
name = rb_ary_shift( col );
type_proc = rb_ary_shift( col );
}
// rb_funcall(rb_mKernel, rb_intern("p"), 2, name, type_proc);
#if 0
rb_p(name);
rb_p(type_proc);
#endif
}
if ( rb_respond_to( type_proc, s_call ) )
@ -1009,9 +1025,9 @@ Init_syck()
VALUE rb_syck = rb_define_module_under( rb_yaml, "Syck" );
rb_define_const( rb_syck, "VERSION", rb_str_new2( SYCK_VERSION ) );
//
// Global symbols
//
/*
* Global symbols
*/
s_new = rb_intern("new");
s_utc = rb_intern("utc");
s_at = rb_intern("at");
@ -1030,15 +1046,15 @@ Init_syck()
sym_scalar = ID2SYM(rb_intern("scalar"));
sym_seq = ID2SYM(rb_intern("seq"));
//
// Load Date module
//
/*
* 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
//
/*
* Define YAML::Syck::Loader class
*/
cLoader = rb_define_class_under( rb_syck, "Loader", rb_cObject );
rb_define_attr( cLoader, "families", 1, 1 );
rb_define_attr( cLoader, "private_types", 1, 1 );
@ -1053,9 +1069,9 @@ Init_syck()
oDefaultLoader = rb_funcall( cLoader, rb_intern( "new" ), 0 );
rb_define_const( rb_syck, "DefaultLoader", oDefaultLoader );
//
// Define YAML::Syck::Parser class
//
/*
* Define YAML::Syck::Parser class
*/
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 );
@ -1063,9 +1079,9 @@ Init_syck()
rb_define_method(cParser, "load", syck_parser_load, -1);
rb_define_method(cParser, "load_documents", syck_parser_load_documents, -1);
//
// Define YAML::Syck::Node class
//
/*
* Define YAML::Syck::Node class
*/
cNode = rb_define_class_under( rb_syck, "Node", rb_cObject );
rb_define_attr( cNode, "kind", 1, 1 );
rb_define_attr( cNode, "type_id", 1, 1 );
@ -1074,33 +1090,33 @@ Init_syck()
rb_define_method( cNode, "initialize", syck_node_initialize, 2);
rb_define_method( cNode, "transform", syck_node_transform, 0);
//
// Define YAML::Syck::PrivateType class
//
/*
* Define YAML::Syck::PrivateType class
*/
cPrivateType = rb_define_class_under( rb_syck, "PrivateType", rb_cObject );
rb_define_attr( cPrivateType, "type_id", 1, 1 );
rb_define_attr( cPrivateType, "value", 1, 1 );
rb_define_method( cPrivateType, "initialize", syck_privatetype_initialize, 2);
//
// Define YAML::Syck::DomainType class
//
/*
* Define YAML::Syck::DomainType class
*/
cDomainType = rb_define_class_under( rb_syck, "DomainType", rb_cObject );
rb_define_attr( cDomainType, "domain", 1, 1 );
rb_define_attr( cDomainType, "type_id", 1, 1 );
rb_define_attr( cDomainType, "value", 1, 1 );
rb_define_method( cDomainType, "initialize", syck_domaintype_initialize, 3);
//
// Define YAML::Syck::BadAlias class
//
/*
* Define YAML::Syck::BadAlias class
*/
cBadAlias = rb_define_class_under( rb_syck, "BadAlias", rb_cObject );
rb_define_attr( cBadAlias, "name", 1, 1 );
rb_define_method( cBadAlias, "initialize", syck_badalias_initialize, 1);
//
// Define YAML::Syck::MergeKey class
//
/*
* Define YAML::Syck::MergeKey class
*/
cMergeKey = rb_define_class_under( rb_syck, "MergeKey", rb_cObject );
}

Просмотреть файл

@ -85,7 +85,7 @@ syck_io_str_read( char *buf, SyckIoStr *str, long max_size, long skip )
}
else
{
// Use exact string length
/* Use exact string length */
while ( str->ptr < str->end ) {
if (*(str->ptr++) == '\n') break;
}
@ -210,18 +210,18 @@ syck_st_free_nodes( char *key, SyckNode *n, char *arg )
void
syck_st_free( SyckParser *p )
{
//
// Free the adhoc symbol table
//
/*
* Free the adhoc symbol table
*/
if ( p->syms != NULL )
{
st_free_table( p->syms );
p->syms = NULL;
}
//
// Free the anchor tables
//
/*
* Free the anchor tables
*/
if ( p->anchors != NULL )
{
st_foreach( p->anchors, syck_st_free_nodes, 0 );
@ -243,9 +243,9 @@ syck_free_parser( SyckParser *p )
char *key;
SyckNode *node;
//
// Free tables, levels
//
/*
* Free tables, levels
*/
syck_st_free( p );
syck_parser_reset_levels( p );
S_FREE( p->levels[0].domain );
@ -349,7 +349,7 @@ syck_parser_pop_level( SyckParser *p )
{
ASSERT( p != NULL );
// The root level should never be popped
/* The root level should never be popped */
if ( p->lvl_idx <= 1 ) return;
p->lvl_idx -= 1;

Просмотреть файл

@ -84,35 +84,35 @@ enum map_part {
};
struct _syck_node {
// Symbol table ID
/* Symbol table ID */
SYMID id;
// Underlying kind
/* Underlying kind */
enum syck_kind_tag kind;
// Fully qualified tag-uri for type
/* Fully qualified tag-uri for type */
char *type_id;
// Anchor name
/* Anchor name */
char *anchor;
union {
// Storage for map data
/* Storage for map data */
struct SyckMap {
SYMID *keys;
SYMID *values;
long capa;
long idx;
} *pairs;
// Storage for sequence data
/* Storage for sequence data */
struct SyckSeq {
SYMID *items;
long capa;
long idx;
} *list;
// Storage for string data
/* Storage for string data */
struct SyckStr {
char *ptr;
long len;
} *str;
} data;
// Shortcut node
/* Shortcut node */
void *shortcut;
};
@ -143,29 +143,29 @@ enum syck_level_status {
};
struct _syck_parser {
// Root node
/* Root node */
SYMID root, root_on_error;
// Implicit typing flag
/* Implicit typing flag */
int implicit_typing, taguri_expansion;
// Scripting language function to handle nodes
/* Scripting language function to handle nodes */
SyckNodeHandler handler;
// Error handler
/* Error handler */
SyckErrorHandler error_handler;
// InvalidAnchor handler
/* InvalidAnchor handler */
SyckBadAnchorHandler bad_anchor_handler;
// IO type
/* IO type */
enum syck_io_type io_type;
// Custom buffer size
/* Custom buffer size */
size_t bufsize;
// Buffer pointers
/* Buffer pointers */
char *buffer, *linectptr, *lineptr, *toktmp, *token, *cursor, *marker, *limit;
// Line counter
/* Line counter */
int linect;
// Last token from yylex()
/* Last token from yylex() */
int last_token;
// Force a token upon next call to yylex()
/* Force a token upon next call to yylex() */
int force_token;
// EOF flag
/* EOF flag */
int eof;
union {
struct _syck_file {
@ -177,11 +177,11 @@ struct _syck_parser {
SyckIoStrRead read;
} *str;
} io;
// Symbol table for anchors
/* Symbol table for anchors */
st_table *anchors, *bad_anchors;
// Optional symbol table for SYMIDs
/* Optional symbol table for SYMIDs */
st_table *syms;
// Levels of indentation
/* Levels of indentation */
struct _syck_level {
int spaces;
char *domain;

Просмотреть файл

@ -448,12 +448,12 @@ yy33: yyaccept = 0;
goto yy86;
yy34:
#line 319
{ // Isolate spaces
{ /* Isolate spaces */
int indt_len;
GOBBLE_UP_INDENT( indt_len, YYTOKEN );
lvl = CURRENT_LEVEL();
// Check for open indent
/* Check for open indent */
ENSURE_IEND(lvl, indt_len);
ENSURE_IOPEN(lvl, indt_len, 0);
if ( indt_len == -1 )
@ -878,11 +878,11 @@ yy74:
{ ENSURE_IOPEN(lvl, 0, 1);
yylval->name = syck_strndup( YYTOKEN + 1, YYCURSOR - YYTOKEN - 1 );
//
// Remove previous anchors of the same name. Since the parser will likely
// construct deeper nodes first, we want those nodes to be placed in the
// queue for matching at a higher level of indentation.
//
/*
* Remove previous anchors of the same name. Since the parser will likely
* construct deeper nodes first, we want those nodes to be placed in the
* queue for matching at a higher level of indentation.
*/
syck_hdlr_remove_anchor(parser, yylval->name);
return ANCHOR;
}
@ -1551,7 +1551,7 @@ yy137:
}
else if ( indt_len < lvl->spaces )
{
// Error!
/* Error! */
}
while ( YYTOKTMP < YYCURSOR )
@ -1685,7 +1685,7 @@ yy153:
}
else if ( indt_len < lvl->spaces )
{
// Error!
/* Error! */
}
if ( keep_nl == 1 )
@ -1909,9 +1909,9 @@ yy180:
lvl = CURRENT_LEVEL();
//
// URL Prefixing
//
/*
* URL Prefixing
*/
if ( *(YYTOKEN + 1) == '^' )
{
yylval->name = S_ALLOC_N( char, ( YYCURSOR - YYTOKEN ) + strlen( lvl->domain ) );
@ -2054,10 +2054,10 @@ yy191:
RETURN_BLOCK();
}
//
// Fold only in the event of two lines being on the leftmost
// indentation.
//
/*
* Fold only in the event of two lines being on the leftmost
* indentation.
*/
if ( blockType == BLOCK_FOLD && lastIndent == 0 && ( indt_len - lvl->spaces ) == 0 )
{
fold_nl = 1;