* ext/syck/bytecode.c: Checkin of YAML bytecode support.

* ext/syck/gram.c: Ditto.

* ext/syck/syck.c: Ditto.

* ext/syck/token.c: Ditto.

* ext/syck/handler.c: Ditto.

* ext/syck/handler.c: Now using 'tag' rather than 'taguri' in type URIs.

* ext/syck/rubyext.c: Ditto (on both counts).


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4769 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
why 2003-10-14 23:15:19 +00:00
parent b215f2fdb9
commit c76c3349e4
12 changed files with 2695 additions and 3713 deletions

View File

@ -1,3 +1,19 @@
Wed Oct 15 08:09:07 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
* ext/syck/bytecode.c: Checkin of YAML bytecode support.
* ext/syck/gram.c: Ditto.
* ext/syck/syck.c: Ditto.
* ext/syck/token.c: Ditto.
* ext/syck/handler.c: Ditto.
* ext/syck/handler.c: Now using 'tag' rather than 'taguri' in type URIs.
* ext/syck/rubyext.c: Ditto (on both counts).
Wed Oct 15 05:05:53 2003 Akinori MUSHA <knu@iDaemons.org> Wed Oct 15 05:05:53 2003 Akinori MUSHA <knu@iDaemons.org>
* lib/generator.rb: A new library which converts an internal * lib/generator.rb: A new library which converts an internal

View File

@ -1,5 +1,7 @@
MANIFEST MANIFEST
extconf.rb extconf.rb
bytecode.c
emitter.c
gram.c gram.c
gram.h gram.h
handler.c handler.c
@ -9,4 +11,3 @@ rubyext.c
syck.c syck.c
syck.h syck.h
token.c token.c
emitter.c

735
ext/syck/bytecode.c Normal file
View File

@ -0,0 +1,735 @@
/* Generated by re2c 0.5 on Tue Oct 14 15:44:30 2003 */
#line 1 "bytecode.re"
/*
* bytecode.re
*
* $Author$
* $Date$
*
* Copyright (C) 2003 why the lucky stiff
*/
#include "syck.h"
#include "ruby.h"
#include "gram.h"
#define QUOTELEN 128
/*
* They do my bidding...
*/
#define YYCTYPE char
#define YYCURSOR parser->cursor
#define YYMARKER parser->marker
#define YYLIMIT parser->limit
#define YYTOKEN parser->token
#define YYTOKTMP parser->toktmp
#define YYLINEPTR parser->lineptr
#define YYLINECTPTR parser->linectptr
#define YYLINE parser->linect
#define YYFILL(n) syck_parser_read(parser)
extern SyckParser *syck_parser_ptr;
char *get_inline( SyckParser *parser );
/*
* Repositions the cursor at `n' offset from the token start.
* Only works in `Header' and `Document' sections.
*/
#define YYPOS(n) YYCURSOR = YYTOKEN + n
/*
* I like seeing the level operations as macros...
*/
#define ADD_LEVEL(len, status) syck_parser_add_level( parser, len, status )
#define POP_LEVEL() syck_parser_pop_level( parser )
#define CURRENT_LEVEL() syck_parser_current_level( parser )
/*
* Force a token next time around sycklex()
*/
#define FORCE_NEXT_TOKEN(tok) parser->force_token = tok;
/*
* Adding levels in bytecode requires us to make sure
* we've got all our tokens worked out.
*/
#define ADD_BYTE_LEVEL(lvl, len, s ) \
switch ( lvl->status ) \
{ \
case syck_lvl_seq: \
lvl->ncount++; \
ADD_LEVEL(len, syck_lvl_open); \
YYPOS(0); \
return '-'; \
\
case syck_lvl_open: \
lvl->status = s; \
break; \
\
default: \
ADD_LEVEL(len, s); \
break; \
}
/*
* Nice little macro to ensure we're YAML_IOPENed to the current level.
* * Only use this macro in the "Document" section *
*/
#define ENSURE_YAML_IOPEN(last_lvl, lvl_type, to_len, reset) \
if ( last_lvl->spaces < to_len ) \
{ \
if ( last_lvl->status == syck_lvl_inline ) \
{ \
goto Document; \
} \
else \
{ \
ADD_LEVEL( to_len, lvl_type ); \
if ( reset == 1 ) YYPOS(0); \
return YAML_IOPEN; \
} \
}
/*
* Nice little macro to ensure closure of levels.
* * Only use this macro in the "Document" section *
*/
#define ENSURE_YAML_IEND(last_lvl, to_len) \
if ( last_lvl->spaces > to_len ) \
{ \
syck_parser_pop_level( parser ); \
YYPOS(0); \
return YAML_IEND; \
}
/*
* Concatenates string items and manages allocation
* to the string
*/
#define CAT(s, c, i, l) \
{ \
if ( i + 1 >= c ) \
{ \
c += QUOTELEN; \
S_REALLOC_N( s, char, c ); \
} \
s[i++] = l; \
s[i] = '\0'; \
}
/*
* Parser for standard YAML Bytecode [UTF-8]
*/
int
sycklex_bytecode_utf8( YYSTYPE *sycklval, SyckParser *parser )
{
SyckLevel *lvl;
int doc_level = 0;
syck_parser_ptr = parser;
if ( YYCURSOR == NULL )
{
syck_parser_read( parser );
}
if ( parser->force_token != 0 )
{
int t = parser->force_token;
parser->force_token = 0;
return t;
}
#line 163
lvl = CURRENT_LEVEL();
if ( lvl->status == syck_lvl_doc )
{
goto Document;
}
Header:
YYTOKEN = YYCURSOR;
{
YYCTYPE yych;
unsigned int yyaccept;
goto yy0;
yy1: ++YYCURSOR;
yy0:
if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
yych = *YYCURSOR;
if(yych <= '\000') goto yy2;
if(yych == 'D') goto yy3;
goto yy5;
yy2: YYCURSOR = YYMARKER;
switch(yyaccept){
case 0: goto yy4;
}
yy3: yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if(yych == '\n') goto yy6;
if(yych == '\r') goto yy8;
yy4:
#line 189
{ YYPOS(0);
goto Document;
}
yy5: yych = *++YYCURSOR;
goto yy4;
yy6: yych = *++YYCURSOR;
yy7:
#line 177
{ if ( lvl->status == syck_lvl_header )
{
goto Directive;
}
else
{
ENSURE_YAML_IEND(lvl, -1);
YYPOS(0);
return 0;
}
}
yy8: yych = *++YYCURSOR;
if(yych == '\n') goto yy6;
goto yy2;
}
#line 193
lvl->status = syck_lvl_doc;
Document:
{
lvl = CURRENT_LEVEL();
if ( lvl->status == syck_lvl_header )
{
lvl->status = syck_lvl_doc;
}
YYTOKEN = YYCURSOR;
{
YYCTYPE yych;
unsigned int yyaccept;
goto yy9;
yy10: ++YYCURSOR;
yy9:
if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
yych = *YYCURSOR;
if(yych <= 'E'){
if(yych <= '\r'){
if(yych <= '\t'){
if(yych <= '\000') goto yy30;
} else {
if(yych <= '\n') goto yy27;
if(yych >= '\r') goto yy29;
}
} else {
if(yych <= 'A'){
if(yych >= 'A') goto yy19;
} else {
if(yych <= 'C') goto yy11;
if(yych <= 'D') goto yy12;
goto yy16;
}
}
} else {
if(yych <= 'Q'){
if(yych <= 'M'){
if(yych >= 'M') goto yy14;
} else {
if(yych <= 'O') goto yy11;
if(yych <= 'P') goto yy13;
goto yy15;
}
} else {
if(yych <= 'T'){
if(yych <= 'R') goto yy21;
if(yych <= 'S') goto yy17;
goto yy23;
} else {
if(yych == 'c') goto yy25;
}
}
}
yy11:yy12: yych = *++YYCURSOR;
if(yych == '\n') goto yy41;
if(yych == '\r') goto yy44;
goto yy11;
yy13: yych = *++YYCURSOR;
if(yych == '\n') goto yy41;
if(yych == '\r') goto yy43;
goto yy11;
yy14: yych = *++YYCURSOR;
if(yych == '\n') goto yy38;
if(yych == '\r') goto yy40;
goto yy11;
yy15: yych = *++YYCURSOR;
if(yych == '\n') goto yy35;
if(yych == '\r') goto yy37;
goto yy11;
yy16: yych = *++YYCURSOR;
if(yych == '\n') goto yy32;
if(yych == '\r') goto yy34;
goto yy11;
yy17: yych = *++YYCURSOR;
yy18:
#line 243
{ ADD_BYTE_LEVEL(lvl, lvl->spaces + 1, syck_lvl_str);
goto Scalar;
}
yy19: yych = *++YYCURSOR;
yy20:
#line 247
{ ADD_BYTE_LEVEL(lvl, lvl->spaces + 1, syck_lvl_open);
sycklval->name = get_inline( parser );
syck_hdlr_remove_anchor( parser, sycklval->name );
return YAML_ANCHOR;
}
yy21: yych = *++YYCURSOR;
yy22:
#line 253
{ ADD_BYTE_LEVEL(lvl, lvl->spaces + 1, syck_lvl_str);
sycklval->name = get_inline( parser );
POP_LEVEL();
if ( *( YYCURSOR - 1 ) == '\n' ) YYCURSOR--;
return YAML_ALIAS;
}
yy23: yych = *++YYCURSOR;
yy24:
#line 260
{ char *qstr = get_inline( parser );
if ( qstr[0] == '!' )
{
int qidx = strlen( qstr );
if ( qstr[1] == '\0' )
{
free( qstr );
return YAML_ITRANSFER;
}
lvl = CURRENT_LEVEL();
/*
* URL Prefixing
*/
if ( qstr[1] == '^' )
{
sycklval->name = S_ALLOC_N( char, qidx + strlen( lvl->domain ) );
sycklval->name[0] = '\0';
strcat( sycklval->name, lvl->domain );
strncat( sycklval->name, qstr + 2, qidx - 2 );
free( qstr );
}
else
{
char *carat = qstr + 1;
char *qend = qstr + qidx;
while ( (++carat) < qend )
{
if ( *carat == '^' )
break;
}
if ( carat < qend )
{
free( lvl->domain );
lvl->domain = syck_strndup( qstr + 1, carat - ( qstr + 1 ) );
sycklval->name = S_ALLOC_N( char, ( qend - carat ) + strlen( lvl->domain ) );
sycklval->name[0] = '\0';
strcat( sycklval->name, lvl->domain );
strncat( sycklval->name, carat + 1, ( qend - carat ) - 1 );
free( qstr );
}
else
{
sycklval->name = S_ALLOC_N( char, strlen( qstr ) );
S_MEMCPY( sycklval->name, qstr + 1, char, strlen( qstr ) );
free( qstr );
}
}
return YAML_TRANSFER;
}
sycklval->name = qstr;
return YAML_TAGURI;
}
yy25: yych = *++YYCURSOR;
yy26:
#line 316
{ goto Comment; }
yy27: yych = *++YYCURSOR;
yy28:
#line 318
{ if ( lvl->status == syck_lvl_seq )
{
return YAML_INDENT;
}
else if ( lvl->status == syck_lvl_map )
{
lvl->ncount++;
if ( lvl->ncount % 2 == 1 ) return ':';
else return YAML_INDENT;
}
goto Document;
}
yy29: yych = *++YYCURSOR;
if(yych == '\n') goto yy27;
goto yy11;
yy30: yych = *++YYCURSOR;
yy31:
#line 331
{ ENSURE_YAML_IEND(lvl, -1);
YYPOS(0);
return 0;
}
yy32: yych = *++YYCURSOR;
yy33:
#line 222
{ POP_LEVEL();
lvl = CURRENT_LEVEL();
if ( lvl->status == syck_lvl_seq )
{
FORCE_NEXT_TOKEN(YAML_INDENT);
}
else if ( lvl->status == syck_lvl_map )
{
lvl->ncount++;
if ( lvl->ncount % 2 == 1 )
{
FORCE_NEXT_TOKEN(':');
}
else
{
FORCE_NEXT_TOKEN(YAML_INDENT);
}
}
return YAML_IEND;
}
yy34: yych = *++YYCURSOR;
if(yych == '\n') goto yy32;
goto yy11;
yy35: yych = *++YYCURSOR;
yy36:
#line 218
{ ADD_BYTE_LEVEL(lvl, lvl->spaces + 1, syck_lvl_seq);
return YAML_IOPEN;
}
yy37: yych = *++YYCURSOR;
if(yych == '\n') goto yy35;
goto yy11;
yy38: yych = *++YYCURSOR;
yy39:
#line 214
{ ADD_BYTE_LEVEL(lvl, lvl->spaces + 1, syck_lvl_map);
return YAML_IOPEN;
}
yy40: yych = *++YYCURSOR;
if(yych == '\n') goto yy38;
goto yy11;
yy41: yych = *++YYCURSOR;
yy42:
#line 209
{ ENSURE_YAML_IEND(lvl, -1);
YYPOS(0);
return 0;
}
yy43: yych = *++YYCURSOR;
if(yych == '\n') goto yy41;
goto yy11;
yy44: yych = *++YYCURSOR;
if(yych == '\n') goto yy41;
goto yy11;
}
#line 336
}
Directive:
{
YYTOKTMP = YYCURSOR;
{
YYCTYPE yych;
unsigned int yyaccept;
goto yy45;
yy46: ++YYCURSOR;
yy45:
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
if(yych <= '\000') goto yy47;
if(yych == 'V') goto yy48;
goto yy50;
yy47: YYCURSOR = YYMARKER;
switch(yyaccept){
case 0: goto yy49;
}
yy48: yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if(yych <= '-') goto yy49;
if(yych == '`') goto yy49;
if(yych <= 'z') goto yy51;
yy49:
#line 348
{ YYCURSOR = YYTOKTMP;
return YAML_DOCSEP;
}
yy50: yych = *++YYCURSOR;
goto yy49;
yy51: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
yy52: if(yych <= ':'){
if(yych <= '-') goto yy47;
if(yych <= '9') goto yy51;
} else {
if(yych == '`') goto yy47;
if(yych <= 'z') goto yy51;
goto yy47;
}
yy53: yych = *++YYCURSOR;
if(yych <= '-') goto yy47;
if(yych == '`') goto yy47;
if(yych >= '{') goto yy47;
yy54: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
yy55: if(yych <= '\r'){
if(yych == '\n') goto yy56;
if(yych <= '\f') goto yy47;
goto yy58;
} else {
if(yych <= '_'){
if(yych <= '-') goto yy47;
goto yy54;
} else {
if(yych <= '`') goto yy47;
if(yych <= 'z') goto yy54;
goto yy47;
}
}
yy56: yych = *++YYCURSOR;
yy57:
#line 346
{ goto Directive; }
yy58: yych = *++YYCURSOR;
if(yych == '\n') goto yy56;
goto yy47;
}
#line 351
}
Comment:
{
YYTOKTMP = YYCURSOR;
{
YYCTYPE yych;
unsigned int yyaccept;
goto yy59;
yy60: ++YYCURSOR;
yy59:
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
if(yych <= '\n'){
if(yych <= '\000') goto yy61;
if(yych <= '\t') goto yy66;
goto yy62;
} else {
if(yych == '\r') goto yy64;
goto yy66;
}
yy61:yy62: yych = *++YYCURSOR;
yy63:
#line 361
{ goto Document; }
yy64: yych = *++YYCURSOR;
if(yych == '\n') goto yy67;
yy65:
#line 363
{ goto Comment; }
yy66: yych = *++YYCURSOR;
goto yy65;
yy67: yych = *++YYCURSOR;
goto yy63;
}
#line 365
}
Scalar:
{
int idx = 0;
int cap = 100;
char *str = S_ALLOC_N( char, cap );
char *tok;
Scalar2:
tok = YYCURSOR;
{
YYCTYPE yych;
unsigned int yyaccept;
goto yy68;
yy69: ++YYCURSOR;
yy68:
if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
yych = *YYCURSOR;
if(yych <= '\n'){
if(yych <= '\000') goto yy74;
if(yych <= '\t') goto yy76;
} else {
if(yych == '\r') goto yy72;
goto yy76;
}
yy70: yych = *++YYCURSOR;
if(yych <= 'M'){
if(yych == 'C') goto yy78;
} else {
if(yych <= 'N') goto yy80;
if(yych == 'Z') goto yy83;
}
yy71:
#line 404
{ YYCURSOR = tok;
goto ScalarEnd;
}
yy72: yych = *++YYCURSOR;
if(yych == '\n') goto yy77;
yy73:
#line 412
{ CAT(str, cap, idx, tok[0]);
goto Scalar2;
}
yy74: yych = *++YYCURSOR;
yy75:
#line 408
{ YYCURSOR = tok;
goto ScalarEnd;
}
yy76: yych = *++YYCURSOR;
goto yy73;
yy77: yych = *++YYCURSOR;
if(yych <= 'M'){
if(yych != 'C') goto yy71;
} else {
if(yych <= 'N') goto yy80;
if(yych == 'Z') goto yy83;
goto yy71;
}
yy78: yych = *++YYCURSOR;
yy79:
#line 381
{ goto Scalar2; }
yy80: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
yy81: if(yych <= '/') goto yy82;
if(yych <= '9') goto yy80;
yy82:
#line 383
{ if ( tok + 2 < YYCURSOR )
{
char *count = tok + 2;
int total = strtod( count, NULL );
int i;
for ( i = 0; i < total; i++ )
{
CAT(str, cap, idx, '\n');
}
}
else
{
CAT(str, cap, idx, '\n');
}
goto Scalar2;
}
yy83: yych = *++YYCURSOR;
yy84:
#line 400
{ CAT(str, cap, idx, '\0');
goto Scalar2;
}
}
#line 416
ScalarEnd:
{
SyckNode *n = syck_alloc_str();
n->data.str->ptr = str;
n->data.str->len = idx;
sycklval->nodeData = n;
POP_LEVEL();
if ( parser->implicit_typing == 1 )
{
try_tag_implicit( sycklval->nodeData, parser->taguri_expansion );
}
return YAML_PLAIN;
}
}
}
char *
get_inline( SyckParser *parser )
{
int idx = 0;
int cap = 100;
char *str = S_ALLOC_N( char, cap );
char *tok;
Inline:
{
tok = YYCURSOR;
{
YYCTYPE yych;
unsigned int yyaccept;
goto yy85;
yy86: ++YYCURSOR;
yy85:
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
if(yych <= '\n'){
if(yych <= '\000') goto yy91;
if(yych <= '\t') goto yy93;
} else {
if(yych == '\r') goto yy89;
goto yy93;
}
yy87: yych = *++YYCURSOR;
yy88:
#line 449
{ return str; }
yy89: yych = *++YYCURSOR;
if(yych == '\n') goto yy94;
yy90:
#line 455
{ CAT(str, cap, idx, tok[0]);
goto Inline;
}
yy91: yych = *++YYCURSOR;
yy92:
#line 451
{ YYCURSOR = tok;
return str;
}
yy93: yych = *++YYCURSOR;
goto yy90;
yy94: yych = *++YYCURSOR;
goto yy88;
}
#line 459
}
}

View File

@ -102,7 +102,7 @@ syck_base64dec( char *s, long len )
} }
} }
*end = '\0'; *end = '\0';
/* RSTRING(buf)->len = ptr - RSTRING(buf)->ptr; */ //RSTRING(buf)->len = ptr - RSTRING(buf)->ptr;
return ptr; return ptr;
} }

View File

@ -62,27 +62,29 @@
YAML_ANCHOR = 258, YAML_ANCHOR = 258,
YAML_ALIAS = 259, YAML_ALIAS = 259,
YAML_TRANSFER = 260, YAML_TRANSFER = 260,
YAML_ITRANSFER = 261, YAML_TAGURI = 261,
YAML_WORD = 262, YAML_ITRANSFER = 262,
YAML_PLAIN = 263, YAML_WORD = 263,
YAML_BLOCK = 264, YAML_PLAIN = 264,
YAML_DOCSEP = 265, YAML_BLOCK = 265,
YAML_IOPEN = 266, YAML_DOCSEP = 266,
YAML_INDENT = 267, YAML_IOPEN = 267,
YAML_IEND = 268 YAML_INDENT = 268,
YAML_IEND = 269
}; };
#endif #endif
#define YAML_ANCHOR 258 #define YAML_ANCHOR 258
#define YAML_ALIAS 259 #define YAML_ALIAS 259
#define YAML_TRANSFER 260 #define YAML_TRANSFER 260
#define YAML_ITRANSFER 261 #define YAML_TAGURI 261
#define YAML_WORD 262 #define YAML_ITRANSFER 262
#define YAML_PLAIN 263 #define YAML_WORD 263
#define YAML_BLOCK 264 #define YAML_PLAIN 264
#define YAML_DOCSEP 265 #define YAML_BLOCK 265
#define YAML_IOPEN 266 #define YAML_DOCSEP 266
#define YAML_INDENT 267 #define YAML_IOPEN 267
#define YAML_IEND 268 #define YAML_INDENT 268
#define YAML_IEND 269
@ -119,7 +121,7 @@ typedef union {
char *name; char *name;
} yystype; } yystype;
/* Line 193 of /usr/local/share/bison/yacc.c. */ /* Line 193 of /usr/local/share/bison/yacc.c. */
#line 123 "y.tab.c" #line 125 "y.tab.c"
# define YYSTYPE yystype # define YYSTYPE yystype
# define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_TRIVIAL 1
#endif #endif
@ -141,7 +143,7 @@ int sycklex( YYSTYPE *, SyckParser * );
/* Line 213 of /usr/local/share/bison/yacc.c. */ /* Line 213 of /usr/local/share/bison/yacc.c. */
#line 144 "y.tab.c" #line 146 "y.tab.c"
#if ! defined (yyoverflow) || YYERROR_VERBOSE #if ! defined (yyoverflow) || YYERROR_VERBOSE
@ -238,21 +240,21 @@ union yyalloc
#endif #endif
/* YYFINAL -- State number of the termination state. */ /* YYFINAL -- State number of the termination state. */
#define YYFINAL 35 #define YYFINAL 38
#define YYLAST 333 #define YYLAST 414
/* YYNTOKENS -- Number of terminals. */ /* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 23 #define YYNTOKENS 23
/* YYNNTS -- Number of nonterminals. */ /* YYNNTS -- Number of nonterminals. */
#define YYNNTS 25 #define YYNNTS 25
/* YYNRULES -- Number of rules. */ /* YYNRULES -- Number of rules. */
#define YYNRULES 63 #define YYNRULES 69
/* YYNRULES -- Number of states. */ /* YYNRULES -- Number of states. */
#define YYNSTATES 106 #define YYNSTATES 121
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
#define YYUNDEFTOK 2 #define YYUNDEFTOK 2
#define YYMAXUTOK 268 #define YYMAXUTOK 269
#define YYTRANSLATE(X) \ #define YYTRANSLATE(X) \
((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK) ((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK)
@ -264,8 +266,8 @@ static const unsigned char yytranslate[] =
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 16, 21, 14, 2, 2, 2, 2, 2, 2, 2, 2, 21, 15, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 2,
2, 2, 2, 22, 2, 2, 2, 2, 2, 2, 2, 2, 2, 22, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@ -286,7 +288,7 @@ static const unsigned char yytranslate[] =
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
5, 6, 7, 8, 9, 10, 11, 12, 13 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
}; };
#if YYDEBUG #if YYDEBUG
@ -296,33 +298,35 @@ static const unsigned char yyprhs[] =
{ {
0, 0, 3, 5, 8, 9, 11, 13, 15, 18, 0, 0, 3, 5, 8, 9, 11, 13, 15, 18,
22, 26, 28, 31, 32, 34, 37, 39, 41, 43, 22, 26, 28, 31, 32, 34, 37, 39, 41, 43,
46, 49, 52, 55, 57, 59, 61, 64, 66, 68, 46, 49, 52, 55, 58, 60, 62, 64, 67, 70,
70, 72, 74, 78, 81, 83, 87, 90, 94, 97, 72, 74, 76, 78, 80, 84, 87, 89, 93, 96,
99, 103, 106, 110, 113, 115, 119, 123, 127, 131, 100, 103, 107, 110, 112, 116, 119, 123, 126, 128,
134, 138, 141, 145, 147, 153, 155, 159, 163, 166, 132, 136, 140, 144, 147, 151, 154, 158, 161, 165,
170, 174, 177, 179 167, 173, 175, 179, 183, 186, 190, 194, 197, 199
}; };
/* YYRHS -- A `-1'-separated list of the rules' RHS. */ /* YYRHS -- A `-1'-separated list of the rules' RHS. */
static const yysigned_char yyrhs[] = static const yysigned_char yyrhs[] =
{ {
24, 0, -1, 33, -1, 10, 27, -1, -1, 32, 24, 0, -1, 33, -1, 11, 27, -1, -1, 32,
-1, 26, -1, 33, -1, 3, 26, -1, 28, 32, -1, 26, -1, 33, -1, 3, 26, -1, 28, 32,
31, -1, 28, 26, 31, -1, 25, -1, 28, 29, 31, -1, 28, 26, 31, -1, 25, -1, 28, 29,
-1, -1, 11, -1, 28, 12, -1, 13, -1, 12, -1, -1, 12, -1, 28, 13, -1, 14, -1, 13,
-1, 13, -1, 30, 31, -1, 5, 32, -1, 6, -1, 14, -1, 30, 31, -1, 5, 32, -1, 6,
32, -1, 3, 32, -1, 4, -1, 7, -1, 8, 32, -1, 7, 32, -1, 3, 32, -1, 4, -1,
-1, 5, 33, -1, 9, -1, 34, -1, 38, -1, 8, -1, 9, -1, 5, 33, -1, 6, 33, -1,
40, -1, 46, -1, 28, 36, 29, -1, 14, 27, 10, -1, 34, -1, 38, -1, 40, -1, 46, -1,
-1, 37, -1, 5, 30, 36, -1, 5, 36, -1, 28, 36, 29, -1, 15, 27, -1, 37, -1, 5,
3, 30, 36, -1, 3, 36, -1, 35, -1, 37, 30, 36, -1, 5, 36, -1, 6, 30, 36, -1,
30, 35, -1, 37, 30, -1, 17, 39, 18, -1, 6, 36, -1, 3, 30, 36, -1, 3, 36, -1,
17, 18, -1, 25, -1, 39, 21, 25, -1, 28, 35, -1, 37, 30, 35, -1, 37, 30, -1, 17,
41, 29, -1, 28, 44, 29, -1, 5, 30, 44, 39, 18, -1, 17, 18, -1, 25, -1, 39, 21,
-1, 5, 41, -1, 3, 30, 44, -1, 3, 41, 25, -1, 28, 41, 29, -1, 28, 44, 29, -1,
-1, 32, 15, 27, -1, 42, -1, 22, 25, 30, 5, 30, 44, -1, 5, 41, -1, 6, 30, 44,
15, 27, -1, 43, -1, 44, 30, 35, -1, 44, -1, 6, 41, -1, 3, 30, 44, -1, 3, 41,
30, 43, -1, 44, 30, -1, 25, 15, 27, -1, -1, 32, 16, 27, -1, 42, -1, 22, 25, 30,
16, 27, -1, 43, -1, 44, 30, 35, -1, 44,
30, 43, -1, 44, 30, -1, 25, 16, 27, -1,
19, 47, 20, -1, 19, 20, -1, 45, -1, 47, 19, 47, 20, -1, 19, 20, -1, 45, -1, 47,
21, 45, -1 21, 45, -1
}; };
@ -332,11 +336,11 @@ static const unsigned short yyrline[] =
{ {
0, 44, 44, 48, 52, 58, 59, 62, 63, 72, 0, 44, 44, 48, 52, 58, 59, 62, 63, 72,
76, 82, 83, 96, 114, 115, 118, 121, 124, 125, 76, 82, 83, 96, 114, 115, 118, 121, 124, 125,
133, 138, 146, 150, 158, 171, 178, 183, 184, 185, 133, 138, 143, 151, 155, 163, 176, 183, 188, 193,
186, 187, 193, 199, 205, 206, 211, 216, 220, 226, 194, 195, 196, 197, 203, 209, 215, 216, 221, 226,
230, 235, 244, 248, 254, 258, 268, 273, 280, 285, 231, 236, 240, 246, 250, 255, 264, 268, 274, 278,
290, 294, 300, 315, 316, 324, 325, 337, 344, 353, 288, 293, 300, 305, 310, 315, 320, 324, 330, 345,
361, 365, 371, 372 346, 354, 355, 367, 374, 383, 391, 395, 401, 402
}; };
#endif #endif
@ -346,9 +350,9 @@ static const unsigned short yyrline[] =
static const char *const yytname[] = static const char *const yytname[] =
{ {
"$end", "error", "$undefined", "YAML_ANCHOR", "YAML_ALIAS", "$end", "error", "$undefined", "YAML_ANCHOR", "YAML_ALIAS",
"YAML_TRANSFER", "YAML_ITRANSFER", "YAML_WORD", "YAML_PLAIN", "YAML_TRANSFER", "YAML_TAGURI", "YAML_ITRANSFER", "YAML_WORD",
"YAML_BLOCK", "YAML_DOCSEP", "YAML_IOPEN", "YAML_INDENT", "YAML_IEND", "YAML_PLAIN", "YAML_BLOCK", "YAML_DOCSEP", "YAML_IOPEN", "YAML_INDENT",
"'-'", "':'", "'+'", "'['", "']'", "'{'", "'}'", "','", "'?'", "YAML_IEND", "'-'", "':'", "'['", "']'", "'{'", "'}'", "','", "'?'",
"$accept", "doc", "atom", "ind_rep", "atom_or_empty", "indent_open", "$accept", "doc", "atom", "ind_rep", "atom_or_empty", "indent_open",
"indent_end", "indent_sep", "indent_flex_end", "word_rep", "struct_rep", "indent_end", "indent_sep", "indent_flex_end", "word_rep", "struct_rep",
"implicit_seq", "basic_seq", "top_imp_seq", "in_implicit_seq", "implicit_seq", "basic_seq", "top_imp_seq", "in_implicit_seq",
@ -364,7 +368,7 @@ static const char *const yytname[] =
static const unsigned short yytoknum[] = static const unsigned short yytoknum[] =
{ {
0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 45, 58, 43, 91, 93, 123, 265, 266, 267, 268, 269, 45, 58, 91, 93, 123,
125, 44, 63 125, 44, 63
}; };
# endif # endif
@ -374,11 +378,11 @@ static const unsigned char yyr1[] =
{ {
0, 23, 24, 24, 24, 25, 25, 26, 26, 26, 0, 23, 24, 24, 24, 25, 25, 26, 26, 26,
26, 27, 27, 27, 28, 28, 29, 30, 31, 31, 26, 27, 27, 27, 28, 28, 29, 30, 31, 31,
32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33,
33, 33, 34, 35, 36, 36, 36, 36, 36, 37, 33, 33, 33, 33, 34, 35, 36, 36, 36, 36,
37, 37, 38, 38, 39, 39, 40, 40, 41, 41, 36, 36, 36, 37, 37, 37, 38, 38, 39, 39,
41, 41, 42, 43, 43, 44, 44, 44, 44, 45, 40, 40, 41, 41, 41, 41, 41, 41, 42, 43,
46, 46, 47, 47 43, 44, 44, 44, 44, 45, 46, 46, 47, 47
}; };
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
@ -386,11 +390,11 @@ static const unsigned char yyr2[] =
{ {
0, 2, 1, 2, 0, 1, 1, 1, 2, 3, 0, 2, 1, 2, 0, 1, 1, 1, 2, 3,
3, 1, 2, 0, 1, 2, 1, 1, 1, 2, 3, 1, 2, 0, 1, 2, 1, 1, 1, 2,
2, 2, 2, 1, 1, 1, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 1,
1, 1, 3, 2, 1, 3, 2, 3, 2, 1, 1, 1, 1, 1, 3, 2, 1, 3, 2, 3,
3, 2, 3, 2, 1, 3, 3, 3, 3, 2, 2, 3, 2, 1, 3, 2, 3, 2, 1, 3,
3, 2, 3, 1, 5, 1, 3, 3, 2, 3, 3, 3, 3, 2, 3, 2, 3, 2, 3, 1,
3, 2, 1, 3 5, 1, 3, 3, 2, 3, 3, 2, 1, 3
}; };
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@ -398,51 +402,55 @@ static const unsigned char yyr2[] =
means the default is an error. */ means the default is an error. */
static const unsigned char yydefact[] = static const unsigned char yydefact[] =
{ {
4, 0, 27, 13, 14, 0, 0, 0, 0, 2, 4, 0, 0, 29, 13, 14, 0, 0, 0, 0,
28, 29, 30, 31, 26, 0, 23, 0, 0, 24, 2, 30, 31, 32, 33, 27, 28, 0, 24, 0,
25, 11, 6, 3, 0, 5, 7, 43, 44, 0, 0, 0, 25, 26, 11, 6, 3, 0, 5, 7,
0, 61, 0, 62, 0, 1, 0, 0, 15, 13, 47, 48, 0, 0, 67, 0, 68, 0, 1, 0,
0, 0, 39, 0, 34, 0, 53, 55, 0, 8, 0, 0, 15, 13, 0, 0, 43, 0, 36, 0,
22, 0, 20, 0, 21, 0, 0, 16, 0, 12, 59, 61, 0, 8, 23, 0, 20, 21, 0, 0,
0, 42, 0, 13, 60, 0, 17, 0, 38, 51, 22, 0, 0, 0, 16, 0, 12, 0, 46, 0,
0, 36, 49, 33, 0, 13, 32, 41, 46, 47, 13, 66, 0, 17, 0, 42, 57, 0, 38, 53,
58, 18, 0, 10, 9, 45, 59, 63, 0, 0, 0, 40, 55, 35, 0, 13, 34, 45, 50, 51,
37, 50, 35, 48, 0, 52, 40, 56, 57, 19, 64, 18, 0, 10, 9, 49, 65, 69, 0, 0,
0, 0, 13, 0, 0, 54 0, 41, 56, 37, 52, 39, 54, 0, 58, 44,
62, 63, 19, 0, 0, 0, 13, 0, 0, 0,
60
}; };
/* YYDEFGOTO[NTERM-NUM]. */ /* YYDEFGOTO[NTERM-NUM]. */
static const yysigned_char yydefgoto[] = static const yysigned_char yydefgoto[] =
{ {
-1, 7, 21, 22, 23, 29, 59, 80, 83, 25, -1, 8, 24, 25, 26, 32, 66, 90, 93, 28,
26, 10, 42, 68, 44, 11, 30, 12, 45, 46, 29, 11, 46, 75, 48, 12, 33, 13, 49, 50,
47, 48, 33, 13, 34 51, 52, 36, 14, 37
}; };
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */ STATE-NUM. */
#define YYPACT_NINF -54 #define YYPACT_NINF -68
static const short yypact[] = static const short yypact[] =
{ {
267, 278, -54, 245, -54, 228, 176, 8, 140, -54, 133, 177, 177, -68, 352, -68, 335, 283, 27, 223,
-54, -54, -54, -54, -54, 245, -54, 262, 325, -54, -68, -68, -68, -68, -68, -68, -68, 352, -68, 369,
-54, -54, -54, -54, 100, -54, -54, -54, -54, 120, 369, 97, -68, -68, -68, -68, -68, 154, -68, -68,
48, -54, -5, -54, 52, -54, 295, 295, -54, 245, -68, -68, 203, -12, -68, 17, -68, 46, -68, 386,
245, -3, -54, 13, 9, 13, -54, -54, 76, -54, 386, 386, -68, 352, 352, 25, -68, 30, 33, 30,
-54, 325, -54, 325, -54, 194, 211, -54, 108, -54, -68, -68, 67, -68, -68, 97, -68, -68, 97, 97,
103, -54, 245, 245, -54, 245, -54, 152, -54, -54, -68, 301, 318, 318, -68, 107, -68, 37, -68, 352,
152, -54, -54, -54, 9, 245, -54, 24, -54, -54, 352, -68, 352, -68, 243, -68, -68, 243, -68, -68,
164, -54, 108, -54, -54, -54, -54, -54, 307, 307, 243, -68, -68, -68, 33, 352, -68, 40, -68, -68,
-54, 9, -54, 9, 32, -54, -54, -54, -54, -54, 263, -68, 107, -68, -68, -68, -68, -68, 399, 399,
6, 6, 245, 313, 313, -54 399, -68, 33, -68, 33, -68, 33, 42, -68, -68,
-68, -68, -68, 84, 84, 84, 352, 9, 9, 9,
-68
}; };
/* YYPGOTO[NTERM-NUM]. */ /* YYPGOTO[NTERM-NUM]. */
static const yysigned_char yypgoto[] = static const yysigned_char yypgoto[] =
{ {
-54, -54, 31, -10, -35, 0, 12, -12, -53, -2, -68, -68, 10, -9, -38, 0, -7, 86, -56, 56,
41, -54, -47, -6, -54, -54, -54, -54, 44, -54, 29, -68, -62, -6, -68, -68, -68, -68, -2, -68,
-28, 15, 14, -54, -54 -26, -67, -3, -68, -68
}; };
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
@ -452,95 +460,113 @@ static const yysigned_char yypgoto[] =
#define YYTABLE_NINF -1 #define YYTABLE_NINF -1
static const unsigned char yytable[] = static const unsigned char yytable[] =
{ {
8, 8, 43, 24, 73, 49, 41, 84, 35, 103, 9, 9, 9, 47, 27, 83, 68, 102, 53, 69,
63, 104, 75, 50, 58, 52, 54, 8, 43, 58, 104, 94, 117, 106, 118, 119, 31, 35, 65, 9,
39, 66, 60, 43, 67, 70, 57, 60, 86, 99, 9, 47, 73, 65, 43, 109, 47, 38, 110, 10,
96, 71, 77, 97, 50, 52, 28, 32, 39, 24, 15, 16, 96, 70, 78, 81, 112, 76, 79, 82,
95, 9, 14, 67, 70, 49, 82, 102, 82, 50, 86, 85, 88, 27, 64, 89, 73, 108, 15, 16,
71, 52, 98, 50, 52, 76, 8, 78, 14, 0, 73, 91, 53, 85, 84, 43, 78, 81, 116, 76,
79, 90, 94, 24, 92, 41, 61, 105, 41, 62, 79, 82, 9, 9, 111, 45, 71, 72, 101, 97,
82, 74, 64, 65, 0, 24, 100, 101, 41, 87, 27, 103, 0, 54, 105, 56, 57, 60, 120, 95,
69, 72, 91, 71, 0, 93, 50, 52, 66, 57, 73, 64, 35, 67, 0, 27, 0, 117, 67, 118,
0, 100, 101, 85, 90, 92, 32, 14, 71, 69, 119, 15, 16, 78, 81, 54, 56, 57, 0, 43,
72, 0, 24, 55, 16, 56, 18, 19, 20, 2, 55, 18, 58, 59, 21, 22, 23, 101, 103, 105,
0, 4, 38, 57, 39, 66, 81, 5, 75, 6, 0, 54, 78, 81, 56, 57, 27, 54, 56, 57,
66, 81, 40, 55, 16, 56, 18, 19, 20, 2, 73, 91, 0, 0, 0, 74, 77, 80, 0, 0,
0, 4, 38, 0, 39, 0, 0, 5, 0, 6, 45, 0, 0, 45, 87, 0, 45, 0, 1, 2,
0, 0, 40, 36, 16, 37, 18, 19, 20, 0, 0, 0, 0, 3, 4, 5, 45, 74, 77, 80,
0, 0, 38, 0, 39, 88, 16, 89, 18, 19, 6, 92, 7, 92, 54, 56, 57, 61, 18, 62,
20, 0, 40, 0, 0, 0, 39, 51, 16, 53, 63, 21, 22, 23, 3, 0, 5, 42, 64, 43,
18, 19, 20, 0, 40, 0, 0, 0, 39, 15, 107, 6, 0, 7, 0, 0, 44, 0, 92, 0,
16, 17, 18, 19, 20, 2, 40, 4, 0, 0, 0, 0, 1, 2, 113, 114, 115, 3, 0, 5,
0, 0, 0, 5, 0, 6, 31, 55, 16, 56, 0, 0, 0, 0, 6, 0, 7, 0, 0, 0,
18, 19, 20, 2, 0, 4, 66, 0, 39, 0, 0, 0, 0, 113, 114, 115, 61, 18, 62, 63,
0, 5, 0, 6, 36, 16, 56, 18, 19, 20, 21, 22, 23, 3, 0, 5, 42, 0, 43, 0,
2, 0, 4, 66, 0, 39, 0, 0, 5, 0, 6, 0, 7, 0, 0, 44, 39, 18, 40, 41,
6, 15, 16, 17, 18, 19, 20, 2, 0, 4, 21, 22, 23, 0, 0, 0, 42, 0, 43, 0,
0, 0, 0, 0, 0, 5, 27, 6, 15, 16, 0, 0, 0, 0, 0, 44, 98, 18, 99, 100,
17, 18, 19, 20, 2, 0, 4, 0, 0, 0, 21, 22, 23, 0, 0, 0, 0, 0, 43, 0,
0, 0, 5, 0, 6, 51, 16, 17, 18, 19, 0, 0, 0, 0, 0, 44, 55, 18, 58, 59,
20, 2, 1, 4, 0, 0, 2, 3, 4, 5, 21, 22, 23, 0, 0, 0, 0, 0, 43, 0,
0, 6, 0, 1, 5, 0, 6, 2, 0, 4, 0, 0, 0, 0, 0, 44, 17, 18, 19, 20,
0, 0, 0, 0, 0, 5, 0, 6, 36, 16, 21, 22, 23, 3, 0, 5, 0, 0, 0, 0,
37, 18, 19, 20, 0, 0, 0, 66, 0, 39, 6, 0, 7, 34, 61, 18, 62, 63, 21, 22,
88, 16, 89, 18, 19, 20, 103, 0, 104, 66, 23, 3, 0, 5, 73, 0, 43, 0, 6, 0,
0, 39, 0, 0, 0, 66, 0, 39, 51, 16, 7, 39, 18, 62, 63, 21, 22, 23, 3, 0,
53, 18, 19, 20 5, 73, 0, 43, 0, 6, 0, 7, 17, 18,
19, 20, 21, 22, 23, 3, 0, 5, 0, 0,
0, 0, 6, 30, 7, 17, 18, 19, 20, 21,
22, 23, 3, 0, 5, 0, 0, 0, 0, 6,
0, 7, 55, 18, 19, 20, 21, 22, 23, 3,
0, 5, 0, 0, 0, 0, 6, 0, 7, 39,
18, 40, 41, 21, 22, 23, 0, 0, 0, 73,
0, 43, 98, 18, 99, 100, 21, 22, 23, 0,
0, 0, 73, 0, 43
}; };
static const yysigned_char yycheck[] = static const yysigned_char yycheck[] =
{ {
0, 1, 8, 3, 39, 15, 8, 60, 0, 3, 0, 1, 2, 9, 4, 43, 18, 74, 17, 21,
15, 5, 15, 15, 24, 17, 18, 17, 24, 29, 77, 67, 3, 80, 5, 6, 6, 7, 27, 19,
14, 12, 24, 29, 36, 37, 13, 29, 63, 82, 20, 27, 13, 32, 15, 87, 32, 0, 90, 0,
77, 37, 44, 80, 36, 37, 5, 6, 14, 39, 1, 2, 70, 16, 40, 41, 92, 39, 40, 41,
75, 0, 1, 55, 56, 55, 58, 15, 60, 51, 47, 16, 49, 43, 14, 52, 13, 85, 19, 20,
56, 53, 80, 55, 56, 43, 56, 45, 17, -1, 13, 14, 61, 16, 44, 15, 62, 63, 16, 61,
48, 67, 74, 63, 70, 67, 18, 102, 70, 21, 62, 63, 62, 63, 90, 9, 20, 21, 74, 72,
82, 40, 20, 21, -1, 75, 88, 89, 80, 65, 70, 77, -1, 17, 80, 19, 20, 21, 116, 69,
36, 37, 67, 89, -1, 70, 88, 89, 12, 13, 13, 14, 72, 27, -1, 85, -1, 3, 32, 5,
-1, 103, 104, 62, 100, 101, 65, 56, 104, 55, 6, 62, 63, 99, 100, 39, 40, 41, -1, 15,
56, -1, 102, 3, 4, 5, 6, 7, 8, 9, 3, 4, 5, 6, 7, 8, 9, 113, 114, 115,
-1, 11, 12, 13, 14, 12, 13, 17, 15, 19, -1, 55, 118, 119, 58, 59, 116, 61, 62, 63,
12, 13, 22, 3, 4, 5, 6, 7, 8, 9, 13, 14, -1, -1, -1, 39, 40, 41, -1, -1,
-1, 11, 12, -1, 14, -1, -1, 17, -1, 19, 74, -1, -1, 77, 48, -1, 80, -1, 5, 6,
-1, -1, 22, 3, 4, 5, 6, 7, 8, -1, -1, -1, -1, 10, 11, 12, 90, 61, 62, 63,
-1, -1, 12, -1, 14, 3, 4, 5, 6, 7, 17, 65, 19, 67, 98, 99, 100, 3, 4, 5,
8, -1, 22, -1, -1, -1, 14, 3, 4, 5, 6, 7, 8, 9, 10, -1, 12, 13, 14, 15,
6, 7, 8, -1, 22, -1, -1, -1, 14, 3, 84, 17, -1, 19, -1, -1, 22, -1, 92, -1,
4, 5, 6, 7, 8, 9, 22, 11, -1, -1, -1, -1, 5, 6, 98, 99, 100, 10, -1, 12,
-1, -1, -1, 17, -1, 19, 20, 3, 4, 5, -1, -1, -1, -1, 17, -1, 19, -1, -1, -1,
6, 7, 8, 9, -1, 11, 12, -1, 14, -1, -1, -1, -1, 117, 118, 119, 3, 4, 5, 6,
-1, 17, -1, 19, 3, 4, 5, 6, 7, 8, 7, 8, 9, 10, -1, 12, 13, -1, 15, -1,
9, -1, 11, 12, -1, 14, -1, -1, 17, -1, 17, -1, 19, -1, -1, 22, 3, 4, 5, 6,
19, 3, 4, 5, 6, 7, 8, 9, -1, 11, 7, 8, 9, -1, -1, -1, 13, -1, 15, -1,
-1, -1, -1, -1, -1, 17, 18, 19, 3, 4, -1, -1, -1, -1, -1, 22, 3, 4, 5, 6,
5, 6, 7, 8, 9, -1, 11, -1, -1, -1, 7, 8, 9, -1, -1, -1, -1, -1, 15, -1,
-1, -1, 17, -1, 19, 3, 4, 5, 6, 7, -1, -1, -1, -1, -1, 22, 3, 4, 5, 6,
8, 9, 5, 11, -1, -1, 9, 10, 11, 17, 7, 8, 9, -1, -1, -1, -1, -1, 15, -1,
-1, 19, -1, 5, 17, -1, 19, 9, -1, 11, -1, -1, -1, -1, -1, 22, 3, 4, 5, 6,
-1, -1, -1, -1, -1, 17, -1, 19, 3, 4, 7, 8, 9, 10, -1, 12, -1, -1, -1, -1,
5, 6, 7, 8, -1, -1, -1, 12, -1, 14, 17, -1, 19, 20, 3, 4, 5, 6, 7, 8,
3, 4, 5, 6, 7, 8, 3, -1, 5, 12, 9, 10, -1, 12, 13, -1, 15, -1, 17, -1,
-1, 14, -1, -1, -1, 12, -1, 14, 3, 4, 19, 3, 4, 5, 6, 7, 8, 9, 10, -1,
5, 6, 7, 8 12, 13, -1, 15, -1, 17, -1, 19, 3, 4,
5, 6, 7, 8, 9, 10, -1, 12, -1, -1,
-1, -1, 17, 18, 19, 3, 4, 5, 6, 7,
8, 9, 10, -1, 12, -1, -1, -1, -1, 17,
-1, 19, 3, 4, 5, 6, 7, 8, 9, 10,
-1, 12, -1, -1, -1, -1, 17, -1, 19, 3,
4, 5, 6, 7, 8, 9, -1, -1, -1, 13,
-1, 15, 3, 4, 5, 6, 7, 8, 9, -1,
-1, -1, 13, -1, 15
}; };
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */ symbol of state STATE-NUM. */
static const unsigned char yystos[] = static const unsigned char yystos[] =
{ {
0, 5, 9, 10, 11, 17, 19, 24, 28, 33, 0, 5, 6, 10, 11, 12, 17, 19, 24, 28,
34, 38, 40, 46, 33, 3, 4, 5, 6, 7, 33, 34, 38, 40, 46, 33, 33, 3, 4, 5,
8, 25, 26, 27, 28, 32, 33, 18, 25, 28, 6, 7, 8, 9, 25, 26, 27, 28, 32, 33,
39, 20, 25, 45, 47, 0, 3, 5, 12, 14, 18, 25, 28, 39, 20, 25, 45, 47, 0, 3,
22, 32, 35, 36, 37, 41, 42, 43, 44, 26, 5, 6, 13, 15, 22, 32, 35, 36, 37, 41,
32, 3, 32, 5, 32, 3, 5, 13, 26, 29, 42, 43, 44, 26, 32, 3, 32, 32, 5, 6,
32, 18, 21, 15, 20, 21, 12, 30, 36, 41, 32, 3, 5, 6, 14, 26, 29, 32, 18, 21,
30, 36, 41, 27, 25, 15, 29, 30, 29, 29, 16, 20, 21, 13, 30, 36, 41, 30, 36, 41,
30, 13, 30, 31, 31, 25, 27, 45, 3, 5, 30, 36, 41, 27, 25, 16, 29, 30, 29, 29,
36, 44, 36, 44, 30, 27, 35, 35, 43, 31, 30, 14, 30, 31, 31, 25, 27, 45, 3, 5,
30, 30, 15, 3, 5, 27 6, 36, 44, 36, 44, 36, 44, 30, 27, 35,
35, 43, 31, 30, 30, 30, 16, 3, 5, 6,
27
}; };
#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
@ -1183,6 +1209,14 @@ yyreduce:
case 21: case 21:
#line 139 "gram.y" #line 139 "gram.y"
{
syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, 0 );
yyval.nodeData = yyvsp[0].nodeData;
}
break;
case 22:
#line 144 "gram.y"
{ {
if ( ((SyckParser *)parser)->implicit_typing == 1 ) if ( ((SyckParser *)parser)->implicit_typing == 1 )
{ {
@ -1192,15 +1226,15 @@ yyreduce:
} }
break; break;
case 22: case 23:
#line 147 "gram.y" #line 152 "gram.y"
{ {
yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-1].name, yyvsp[0].nodeData ); yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-1].name, yyvsp[0].nodeData );
} }
break; break;
case 23: case 24:
#line 151 "gram.y" #line 156 "gram.y"
{ {
/* /*
* _Aliases_: The anchor symbol table is scanned for the anchor name. * _Aliases_: The anchor symbol table is scanned for the anchor name.
@ -1210,8 +1244,8 @@ yyreduce:
} }
break; break;
case 24: case 25:
#line 159 "gram.y" #line 164 "gram.y"
{ {
SyckNode *n = yyvsp[0].nodeData; SyckNode *n = yyvsp[0].nodeData;
if ( ((SyckParser *)parser)->taguri_expansion == 1 ) if ( ((SyckParser *)parser)->taguri_expansion == 1 )
@ -1226,157 +1260,197 @@ yyreduce:
} }
break; break;
case 26: case 27:
#line 179 "gram.y" #line 184 "gram.y"
{ {
syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, ((SyckParser *)parser)->taguri_expansion ); syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, ((SyckParser *)parser)->taguri_expansion );
yyval.nodeData = yyvsp[0].nodeData; yyval.nodeData = yyvsp[0].nodeData;
} }
break; break;
case 32: case 28:
#line 194 "gram.y" #line 189 "gram.y"
{
syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, 0 );
yyval.nodeData = yyvsp[0].nodeData;
}
break;
case 34:
#line 204 "gram.y"
{ {
yyval.nodeData = yyvsp[-1].nodeData; yyval.nodeData = yyvsp[-1].nodeData;
} }
break; break;
case 33: case 35:
#line 200 "gram.y" #line 210 "gram.y"
{ {
yyval.nodeId = syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData ); yyval.nodeId = syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData );
} }
break; break;
case 35:
#line 207 "gram.y"
{
syck_add_transfer( yyvsp[-2].name, yyvsp[0].nodeData, ((SyckParser *)parser)->taguri_expansion );
yyval.nodeData = yyvsp[0].nodeData;
}
break;
case 36:
#line 212 "gram.y"
{
syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, ((SyckParser *)parser)->taguri_expansion );
yyval.nodeData = yyvsp[0].nodeData;
}
break;
case 37: case 37:
#line 217 "gram.y" #line 217 "gram.y"
{
yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-2].name, yyvsp[0].nodeData );
}
break;
case 38:
#line 221 "gram.y"
{
yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-1].name, yyvsp[0].nodeData );
}
break;
case 39:
#line 227 "gram.y"
{
yyval.nodeData = syck_new_seq( yyvsp[0].nodeId );
}
break;
case 40:
#line 231 "gram.y"
{
syck_seq_add( yyvsp[-2].nodeData, yyvsp[0].nodeId );
yyval.nodeData = yyvsp[-2].nodeData;
}
break;
case 41:
#line 236 "gram.y"
{
yyval.nodeData = yyvsp[-1].nodeData;
}
break;
case 42:
#line 245 "gram.y"
{
yyval.nodeData = yyvsp[-1].nodeData;
}
break;
case 43:
#line 249 "gram.y"
{
yyval.nodeData = syck_alloc_seq();
}
break;
case 44:
#line 255 "gram.y"
{
yyval.nodeData = syck_new_seq( syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData ) );
}
break;
case 45:
#line 259 "gram.y"
{
syck_seq_add( yyvsp[-2].nodeData, syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData ) );
yyval.nodeData = yyvsp[-2].nodeData;
}
break;
case 46:
#line 269 "gram.y"
{
apply_seq_in_map( (SyckParser *)parser, yyvsp[-1].nodeData );
yyval.nodeData = yyvsp[-1].nodeData;
}
break;
case 47:
#line 274 "gram.y"
{
apply_seq_in_map( (SyckParser *)parser, yyvsp[-1].nodeData );
yyval.nodeData = yyvsp[-1].nodeData;
}
break;
case 48:
#line 281 "gram.y"
{ {
syck_add_transfer( yyvsp[-2].name, yyvsp[0].nodeData, ((SyckParser *)parser)->taguri_expansion ); syck_add_transfer( yyvsp[-2].name, yyvsp[0].nodeData, ((SyckParser *)parser)->taguri_expansion );
yyval.nodeData = yyvsp[0].nodeData; yyval.nodeData = yyvsp[0].nodeData;
} }
break; break;
case 49: case 38:
#line 286 "gram.y" #line 222 "gram.y"
{ {
syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, ((SyckParser *)parser)->taguri_expansion ); syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, ((SyckParser *)parser)->taguri_expansion );
yyval.nodeData = yyvsp[0].nodeData; yyval.nodeData = yyvsp[0].nodeData;
} }
break; break;
case 50: case 39:
#line 291 "gram.y" #line 227 "gram.y"
{
syck_add_transfer( yyvsp[-2].name, yyvsp[0].nodeData, 0 );
yyval.nodeData = yyvsp[0].nodeData;
}
break;
case 40:
#line 232 "gram.y"
{
syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, 0 );
yyval.nodeData = yyvsp[0].nodeData;
}
break;
case 41:
#line 237 "gram.y"
{ {
yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-2].name, yyvsp[0].nodeData ); yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-2].name, yyvsp[0].nodeData );
} }
break; break;
case 51: case 42:
#line 295 "gram.y" #line 241 "gram.y"
{ {
yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-1].name, yyvsp[0].nodeData ); yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-1].name, yyvsp[0].nodeData );
} }
break; break;
case 43:
#line 247 "gram.y"
{
yyval.nodeData = syck_new_seq( yyvsp[0].nodeId );
}
break;
case 44:
#line 251 "gram.y"
{
syck_seq_add( yyvsp[-2].nodeData, yyvsp[0].nodeId );
yyval.nodeData = yyvsp[-2].nodeData;
}
break;
case 45:
#line 256 "gram.y"
{
yyval.nodeData = yyvsp[-1].nodeData;
}
break;
case 46:
#line 265 "gram.y"
{
yyval.nodeData = yyvsp[-1].nodeData;
}
break;
case 47:
#line 269 "gram.y"
{
yyval.nodeData = syck_alloc_seq();
}
break;
case 48:
#line 275 "gram.y"
{
yyval.nodeData = syck_new_seq( syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData ) );
}
break;
case 49:
#line 279 "gram.y"
{
syck_seq_add( yyvsp[-2].nodeData, syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData ) );
yyval.nodeData = yyvsp[-2].nodeData;
}
break;
case 50:
#line 289 "gram.y"
{
apply_seq_in_map( (SyckParser *)parser, yyvsp[-1].nodeData );
yyval.nodeData = yyvsp[-1].nodeData;
}
break;
case 51:
#line 294 "gram.y"
{
apply_seq_in_map( (SyckParser *)parser, yyvsp[-1].nodeData );
yyval.nodeData = yyvsp[-1].nodeData;
}
break;
case 52: case 52:
#line 301 "gram.y" #line 301 "gram.y"
{
syck_add_transfer( yyvsp[-2].name, yyvsp[0].nodeData, ((SyckParser *)parser)->taguri_expansion );
yyval.nodeData = yyvsp[0].nodeData;
}
break;
case 53:
#line 306 "gram.y"
{
syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, ((SyckParser *)parser)->taguri_expansion );
yyval.nodeData = yyvsp[0].nodeData;
}
break;
case 54:
#line 311 "gram.y"
{
syck_add_transfer( yyvsp[-2].name, yyvsp[0].nodeData, 0 );
yyval.nodeData = yyvsp[0].nodeData;
}
break;
case 55:
#line 316 "gram.y"
{
syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, 0 );
yyval.nodeData = yyvsp[0].nodeData;
}
break;
case 56:
#line 321 "gram.y"
{
yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-2].name, yyvsp[0].nodeData );
}
break;
case 57:
#line 325 "gram.y"
{
yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-1].name, yyvsp[0].nodeData );
}
break;
case 58:
#line 331 "gram.y"
{ {
yyval.nodeData = syck_new_map( yyval.nodeData = syck_new_map(
syck_hdlr_add_node( (SyckParser *)parser, yyvsp[-2].nodeData ), syck_hdlr_add_node( (SyckParser *)parser, yyvsp[-2].nodeData ),
@ -1384,8 +1458,8 @@ yyreduce:
} }
break; break;
case 54: case 60:
#line 317 "gram.y" #line 347 "gram.y"
{ {
yyval.nodeData = syck_new_map( yyval.nodeData = syck_new_map(
syck_hdlr_add_node( (SyckParser *)parser, yyvsp[-3].nodeData ), syck_hdlr_add_node( (SyckParser *)parser, yyvsp[-3].nodeData ),
@ -1393,8 +1467,8 @@ yyreduce:
} }
break; break;
case 56: case 62:
#line 326 "gram.y" #line 356 "gram.y"
{ {
if ( yyvsp[-2].nodeData->shortcut == NULL ) if ( yyvsp[-2].nodeData->shortcut == NULL )
{ {
@ -1408,8 +1482,8 @@ yyreduce:
} }
break; break;
case 57: case 63:
#line 338 "gram.y" #line 368 "gram.y"
{ {
apply_seq_in_map( (SyckParser *)parser, yyvsp[-2].nodeData ); apply_seq_in_map( (SyckParser *)parser, yyvsp[-2].nodeData );
syck_map_update( yyvsp[-2].nodeData, yyvsp[0].nodeData ); syck_map_update( yyvsp[-2].nodeData, yyvsp[0].nodeData );
@ -1418,15 +1492,15 @@ yyreduce:
} }
break; break;
case 58: case 64:
#line 345 "gram.y" #line 375 "gram.y"
{ {
yyval.nodeData = yyvsp[-1].nodeData; yyval.nodeData = yyvsp[-1].nodeData;
} }
break; break;
case 59: case 65:
#line 354 "gram.y" #line 384 "gram.y"
{ {
yyval.nodeData = syck_new_map( yyval.nodeData = syck_new_map(
syck_hdlr_add_node( (SyckParser *)parser, yyvsp[-2].nodeData ), syck_hdlr_add_node( (SyckParser *)parser, yyvsp[-2].nodeData ),
@ -1434,22 +1508,22 @@ yyreduce:
} }
break; break;
case 60: case 66:
#line 362 "gram.y" #line 392 "gram.y"
{ {
yyval.nodeData = yyvsp[-1].nodeData; yyval.nodeData = yyvsp[-1].nodeData;
} }
break; break;
case 61: case 67:
#line 366 "gram.y" #line 396 "gram.y"
{ {
yyval.nodeData = syck_alloc_map(); yyval.nodeData = syck_alloc_map();
} }
break; break;
case 63: case 69:
#line 373 "gram.y" #line 403 "gram.y"
{ {
syck_map_update( yyvsp[-2].nodeData, yyvsp[0].nodeData ); syck_map_update( yyvsp[-2].nodeData, yyvsp[0].nodeData );
syck_free_node( yyvsp[0].nodeData ); syck_free_node( yyvsp[0].nodeData );
@ -1461,7 +1535,7 @@ yyreduce:
} }
/* Line 1016 of /usr/local/share/bison/yacc.c. */ /* Line 1016 of /usr/local/share/bison/yacc.c. */
#line 1464 "y.tab.c" #line 1538 "y.tab.c"
yyvsp -= yylen; yyvsp -= yylen;
yyssp -= yylen; yyssp -= yylen;
@ -1680,7 +1754,7 @@ yyreturn:
} }
#line 380 "gram.y" #line 410 "gram.y"
void void

View File

@ -35,27 +35,29 @@
YAML_ANCHOR = 258, YAML_ANCHOR = 258,
YAML_ALIAS = 259, YAML_ALIAS = 259,
YAML_TRANSFER = 260, YAML_TRANSFER = 260,
YAML_ITRANSFER = 261, YAML_TAGURI = 261,
YAML_WORD = 262, YAML_ITRANSFER = 262,
YAML_PLAIN = 263, YAML_WORD = 263,
YAML_BLOCK = 264, YAML_PLAIN = 264,
YAML_DOCSEP = 265, YAML_BLOCK = 265,
YAML_IOPEN = 266, YAML_DOCSEP = 266,
YAML_INDENT = 267, YAML_IOPEN = 267,
YAML_IEND = 268 YAML_INDENT = 268,
YAML_IEND = 269
}; };
#endif #endif
#define YAML_ANCHOR 258 #define YAML_ANCHOR 258
#define YAML_ALIAS 259 #define YAML_ALIAS 259
#define YAML_TRANSFER 260 #define YAML_TRANSFER 260
#define YAML_ITRANSFER 261 #define YAML_TAGURI 261
#define YAML_WORD 262 #define YAML_ITRANSFER 262
#define YAML_PLAIN 263 #define YAML_WORD 263
#define YAML_BLOCK 264 #define YAML_PLAIN 264
#define YAML_DOCSEP 265 #define YAML_BLOCK 265
#define YAML_IOPEN 266 #define YAML_DOCSEP 266
#define YAML_INDENT 267 #define YAML_IOPEN 267
#define YAML_IEND 268 #define YAML_INDENT 268
#define YAML_IEND 269
@ -68,7 +70,7 @@ typedef union {
char *name; char *name;
} yystype; } yystype;
/* Line 1281 of /usr/local/share/bison/yacc.c. */ /* Line 1281 of /usr/local/share/bison/yacc.c. */
#line 72 "y.tab.h" #line 74 "y.tab.h"
# define YYSTYPE yystype # define YYSTYPE yystype
#endif #endif

View File

@ -141,7 +141,7 @@ syck_taguri( char *domain, char *type_id, int type_len )
{ {
char *uri = S_ALLOC_N( char, strlen( domain ) + type_len + 14 ); char *uri = S_ALLOC_N( char, strlen( domain ) + type_len + 14 );
uri[0] = '\0'; uri[0] = '\0';
strcat( uri, "taguri:" ); strcat( uri, "tag:" );
strcat( uri, domain ); strcat( uri, domain );
strcat( uri, ":" ); strcat( uri, ":" );
strncat( uri, type_id, type_len ); strncat( uri, type_id, type_len );

File diff suppressed because it is too large Load Diff

View File

@ -41,7 +41,7 @@ typedef struct RVALUE {
* symbols and constants * 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, s_keys, s_to_str, s_unpack, s_tr_bang, s_anchors, s_default_set; 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, s_anchors, s_default_set;
static VALUE sym_model, sym_generic; static VALUE sym_model, sym_generic, sym_input, sym_bytecode;
static VALUE sym_scalar, sym_seq, sym_map; static VALUE sym_scalar, sym_seq, sym_map;
VALUE cDate, cParser, cLoader, cNode, cPrivateType, cDomainType, cBadAlias, cDefaultKey, cMergeKey, cEmitter; VALUE cDate, cParser, cLoader, cNode, cPrivateType, cDomainType, cBadAlias, cDefaultKey, cMergeKey, cEmitter;
VALUE oDefaultLoader; VALUE oDefaultLoader;
@ -473,18 +473,22 @@ yaml_org_handler( n, ref )
break; break;
case syck_seq_kind: case syck_seq_kind:
if ( type_id == NULL || strcmp( type_id, "seq" ) == 0 )
{
transferred = 1;
}
obj = rb_ary_new2( n->data.list->idx ); obj = rb_ary_new2( n->data.list->idx );
for ( i = 0; i < n->data.list->idx; i++ ) for ( i = 0; i < n->data.list->idx; i++ )
{ {
rb_ary_store( obj, i, syck_seq_read( n, i ) ); rb_ary_store( obj, i, syck_seq_read( n, i ) );
} }
if ( type_id == NULL || strcmp( type_id, "seq" ) == 0 )
{
transferred = 1;
}
break; break;
case syck_map_kind: case syck_map_kind:
if ( type_id == NULL || strcmp( type_id, "map" ) == 0 )
{
transferred = 1;
}
obj = rb_hash_new(); obj = rb_hash_new();
for ( i = 0; i < n->data.pairs->idx; i++ ) for ( i = 0; i < n->data.pairs->idx; i++ )
{ {
@ -529,10 +533,6 @@ yaml_org_handler( n, ref )
rb_hash_aset( obj, k, v ); rb_hash_aset( obj, k, v );
} }
} }
if ( type_id == NULL || strcmp( type_id, "map" ) == 0 )
{
transferred = 1;
}
break; break;
} }
@ -609,7 +609,7 @@ rb_syck_bad_anchor_handler(p, a)
char *a; char *a;
{ {
SyckNode *badanc = syck_new_map( rb_str_new2( "name" ), rb_str_new2( a ) ); SyckNode *badanc = syck_new_map( rb_str_new2( "name" ), rb_str_new2( a ) );
badanc->type_id = syck_strndup( "taguri:ruby.yaml.org,2002:object:YAML::Syck::BadAlias", 53 ); badanc->type_id = syck_strndup( "tag:ruby.yaml.org,2002:object:YAML::Syck::BadAlias", 53 );
return badanc; return badanc;
} }
@ -617,9 +617,9 @@ rb_syck_bad_anchor_handler(p, a)
* data loaded based on the model requested. * data loaded based on the model requested.
*/ */
void void
syck_set_model( parser, model ) syck_set_model( parser, input, model )
SyckParser *parser; SyckParser *parser;
VALUE model; VALUE input, model;
{ {
if ( model == sym_generic ) if ( model == sym_generic )
{ {
@ -633,6 +633,10 @@ syck_set_model( parser, model )
syck_parser_implicit_typing( parser, 1 ); syck_parser_implicit_typing( parser, 1 );
syck_parser_taguri_expansion( parser, 0 ); syck_parser_taguri_expansion( parser, 0 );
} }
if ( input == sym_bytecode )
{
syck_parser_set_input_type( parser, syck_bytecode_utf8 );
}
syck_parser_error_handler( parser, rb_syck_err_handler ); syck_parser_error_handler( parser, rb_syck_err_handler );
syck_parser_bad_anchor_handler( parser, rb_syck_bad_anchor_handler ); syck_parser_bad_anchor_handler( parser, rb_syck_bad_anchor_handler );
} }
@ -694,7 +698,7 @@ syck_parser_load(argc, argv, self)
VALUE *argv; VALUE *argv;
VALUE self; VALUE self;
{ {
VALUE port, proc, model; VALUE port, proc, model, input;
SyckParser *parser; SyckParser *parser;
struct parser_xtra bonus; struct parser_xtra bonus;
volatile VALUE hash; /* protect from GC */ volatile VALUE hash; /* protect from GC */
@ -702,8 +706,9 @@ syck_parser_load(argc, argv, self)
rb_scan_args(argc, argv, "11", &port, &proc); 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 ); model = rb_hash_aref( rb_iv_get( self, "@options" ), sym_model );
syck_set_model( parser, 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(); bonus.data = hash = rb_hash_new();
@ -724,7 +729,7 @@ syck_parser_load_documents(argc, argv, self)
VALUE *argv; VALUE *argv;
VALUE self; VALUE self;
{ {
VALUE port, proc, v, model; VALUE port, proc, v, input, model;
SyckParser *parser; SyckParser *parser;
struct parser_xtra bonus; struct parser_xtra bonus;
volatile VALUE hash; volatile VALUE hash;
@ -732,8 +737,9 @@ syck_parser_load_documents(argc, argv, self)
rb_scan_args(argc, argv, "1&", &port, &proc); 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 ); model = rb_hash_aref( rb_iv_get( self, "@options" ), sym_model );
syck_set_model( parser, 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 ) while ( 1 )
@ -929,7 +935,7 @@ syck_loader_transfer( self, type, val )
int transferred = 0; int transferred = 0;
VALUE scheme, name, type_hash, domain = Qnil, type_proc = Qnil; VALUE scheme, name, type_hash, domain = Qnil, type_proc = Qnil;
VALUE type_uri = rb_str_new2( taguri ); VALUE type_uri = rb_str_new2( taguri );
VALUE str_taguri = rb_str_new2("taguri"); VALUE str_taguri = rb_str_new2("tag");
VALUE str_xprivate = rb_str_new2("x-private"); VALUE str_xprivate = rb_str_new2("x-private");
VALUE str_yaml_domain = rb_str_new2(YAML_DOMAIN); VALUE str_yaml_domain = rb_str_new2(YAML_DOMAIN);
VALUE parts = rb_str_split( type_uri, ":" ); VALUE parts = rb_str_split( type_uri, ":" );
@ -1296,6 +1302,8 @@ Init_syck()
sym_model = ID2SYM(rb_intern("Model")); sym_model = ID2SYM(rb_intern("Model"));
sym_generic = ID2SYM(rb_intern("Generic")); 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_map = ID2SYM(rb_intern("map"));
sym_scalar = ID2SYM(rb_intern("scalar")); sym_scalar = ID2SYM(rb_intern("scalar"));
sym_seq = ID2SYM(rb_intern("seq")); sym_seq = ID2SYM(rb_intern("seq"));

View File

@ -9,8 +9,8 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include "syck.h"
#include "ruby.h" #include "ruby.h"
#include "syck.h"
void syck_parser_pop_level( SyckParser * ); void syck_parser_pop_level( SyckParser * );
@ -109,6 +109,7 @@ syck_parser_reset_levels( SyckParser *p )
{ {
p->lvl_idx = 1; p->lvl_idx = 1;
p->levels[0].spaces = -1; p->levels[0].spaces = -1;
p->levels[0].ncount = 0;
p->levels[0].domain = syck_strndup( "", 0 ); p->levels[0].domain = syck_strndup( "", 0 );
} }
p->levels[0].status = syck_lvl_header; p->levels[0].status = syck_lvl_header;
@ -159,6 +160,7 @@ syck_new_parser()
p = S_ALLOC( SyckParser ); p = S_ALLOC( SyckParser );
p->lvl_capa = ALLOC_CT; p->lvl_capa = ALLOC_CT;
p->levels = S_ALLOC_N( SyckLevel, p->lvl_capa ); p->levels = S_ALLOC_N( SyckLevel, p->lvl_capa );
p->input_type = syck_yaml_utf8;
p->io_type = syck_io_str; p->io_type = syck_io_str;
p->io.str = NULL; p->io.str = NULL;
p->syms = NULL; p->syms = NULL;
@ -282,6 +284,13 @@ syck_parser_bad_anchor_handler( SyckParser *p, SyckBadAnchorHandler hdlr )
p->bad_anchor_handler = hdlr; p->bad_anchor_handler = hdlr;
} }
void
syck_parser_set_input_type( SyckParser *p, enum syck_parser_input input_type )
{
ASSERT( p != NULL );
p->input_type = input_type;
}
void void
syck_parser_file( SyckParser *p, FILE *fp, SyckIoFileRead read ) syck_parser_file( SyckParser *p, FILE *fp, SyckIoFileRead read )
{ {
@ -358,6 +367,7 @@ syck_parser_add_level( SyckParser *p, int len, enum syck_level_status status )
ASSERT( len > p->levels[p->lvl_idx-1].spaces ); ASSERT( len > p->levels[p->lvl_idx-1].spaces );
p->levels[p->lvl_idx].spaces = len; p->levels[p->lvl_idx].spaces = len;
p->levels[p->lvl_idx].ncount = 0;
p->levels[p->lvl_idx].domain = syck_strndup( p->levels[p->lvl_idx-1].domain, strlen( p->levels[p->lvl_idx-1].domain ) ); p->levels[p->lvl_idx].domain = syck_strndup( p->levels[p->lvl_idx-1].domain, strlen( p->levels[p->lvl_idx-1].domain ) );
p->levels[p->lvl_idx].status = status; p->levels[p->lvl_idx].status = status;
p->lvl_idx += 1; p->lvl_idx += 1;

View File

@ -13,11 +13,9 @@
#define SYCK_YAML_MAJOR 1 #define SYCK_YAML_MAJOR 1
#define SYCK_YAML_MINOR 0 #define SYCK_YAML_MINOR 0
#define SYCK_VERSION "0.39" #define SYCK_VERSION "0.41"
#define YAML_DOMAIN "yaml.org,2002" #define YAML_DOMAIN "yaml.org,2002"
#include <stdio.h>
#include <ctype.h>
#include "st.h" #include "st.h"
#if defined(__cplusplus) #if defined(__cplusplus)
@ -139,9 +137,17 @@ enum syck_io_type {
syck_io_file syck_io_file
}; };
enum syck_parser_input {
syck_yaml_utf8,
syck_yaml_utf16,
syck_yaml_utf32,
syck_bytecode_utf8
};
enum syck_level_status { enum syck_level_status {
syck_lvl_header, syck_lvl_header,
syck_lvl_doc, syck_lvl_doc,
syck_lvl_open,
syck_lvl_seq, syck_lvl_seq,
syck_lvl_map, syck_lvl_map,
syck_lvl_block, syck_lvl_block,
@ -170,6 +176,7 @@ struct _syck_str {
struct _syck_level { struct _syck_level {
int spaces; int spaces;
int ncount;
char *domain; char *domain;
enum syck_level_status status; enum syck_level_status status;
}; };
@ -185,6 +192,8 @@ struct _syck_parser {
SyckErrorHandler error_handler; SyckErrorHandler error_handler;
/* InvalidAnchor handler */ /* InvalidAnchor handler */
SyckBadAnchorHandler bad_anchor_handler; SyckBadAnchorHandler bad_anchor_handler;
/* Parser input type */
enum syck_parser_input input_type;
/* IO type */ /* IO type */
enum syck_io_type io_type; enum syck_io_type io_type;
/* Custom buffer size */ /* Custom buffer size */
@ -374,8 +383,7 @@ void apply_seq_in_map( SyckParser *, SyckNode * );
/* /*
* Lexer prototypes * Lexer prototypes
*/ */
int syckparse( void * ); void syckerror( char * );
void syckerror( char *msg );
#ifndef ST_DATA_T_DEFINED #ifndef ST_DATA_T_DEFINED
typedef long st_data_t; typedef long st_data_t;

File diff suppressed because it is too large Load Diff