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

* ext/syck/gram.c: added grammar for certain empty sequence entries.

* ext/syck/handler.c, ext/syck/syck.c, ext/syck/syck.h: track bad anchors.

* ext/syck/token.c: added pause token, tag possible circular references.

* lib/yaml/rubytypes.rb: parsing YMD time as Date instance.

* ext/syck/rubyext.c: ditto. DomainType, PrivateType, BadAlias classes.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3954 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
why 2003-06-17 16:55:54 +00:00
parent 77e941269f
commit ae28f1b6b3
9 changed files with 1085 additions and 801 deletions

View file

@ -1,3 +1,15 @@
Tue Jun 17 17:01:08 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
* ext/syck/gram.c: added grammar for certain empty sequence entries.
* ext/syck/handler.c, ext/syck/syck.c, ext/syck/syck.h: track bad anchors.
* ext/syck/token.c: added pause token, tag possible circular references.
* lib/yaml/rubytypes.rb: parsing YMD time as Date instance.
* ext/syck/rubyext.c: ditto. DomainType, PrivateType, BadAlias classes.
Tue Jun 17 21:28:27 2003 Ariff Abdullah <skywizard@time.net.my>
* win32/win32.c (rb_w32_opendir): need to set errno. [ruby-talk:73761]

View file

@ -306,6 +306,22 @@ lib/rexml/parsers/sax2parser.rb
lib/rexml/parsers/streamparser.rb
lib/rexml/parsers/ultralightparser.rb
lib/rexml/parsers/xpathparser.rb
lib/yaml.rb
lib/yaml/basenode.rb
lib/yaml/constants.rb
lib/yaml/dbm.rb
lib/yaml/emitter.rb
lib/yaml/encoding.rb
lib/yaml/error.rb
lib/yaml/loader.rb
lib/yaml/rubytypes.rb
lib/yaml/store.rb
lib/yaml/stream.rb
lib/yaml/stringio.rb
lib/yaml/syck.rb
lib/yaml/types.rb
lib/yaml/yamlnode.rb
lib/yaml/ypath.rb
misc/README
misc/inf-ruby.el
misc/ruby-mode.el

View file

@ -228,17 +228,17 @@ union yyalloc
#endif
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 34
#define YYLAST 307
#define YYFINAL 35
#define YYLAST 333
/* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 23
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 25
/* YYNRULES -- Number of rules. */
#define YYNRULES 62
#define YYNRULES 63
/* YYNRULES -- Number of states. */
#define YYNSTATES 104
#define YYNSTATES 106
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
#define YYUNDEFTOK 2
@ -285,12 +285,12 @@ static const unsigned char yytranslate[] =
static const unsigned char yyprhs[] =
{
0, 0, 3, 5, 8, 9, 11, 13, 15, 18,
22, 26, 28, 29, 31, 34, 36, 38, 40, 43,
46, 49, 52, 54, 56, 58, 61, 63, 65, 67,
69, 71, 75, 78, 80, 84, 87, 91, 94, 96,
100, 103, 107, 110, 112, 116, 120, 124, 128, 131,
135, 138, 142, 144, 150, 152, 156, 160, 163, 167,
171, 174, 176
22, 26, 28, 31, 32, 34, 37, 39, 41, 43,
46, 49, 52, 55, 57, 59, 61, 64, 66, 68,
70, 72, 74, 78, 81, 83, 87, 90, 94, 97,
99, 103, 106, 110, 113, 115, 119, 123, 127, 131,
134, 138, 141, 145, 147, 153, 155, 159, 163, 166,
170, 174, 177, 179
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
@ -298,34 +298,35 @@ static const yysigned_char yyrhs[] =
{
24, 0, -1, 33, -1, 10, 27, -1, -1, 32,
-1, 26, -1, 33, -1, 3, 26, -1, 28, 32,
31, -1, 28, 26, 31, -1, 25, -1, -1, 11,
-1, 28, 12, -1, 13, -1, 12, -1, 13, -1,
30, 31, -1, 5, 32, -1, 6, 32, -1, 3,
32, -1, 4, -1, 7, -1, 8, -1, 5, 33,
-1, 9, -1, 34, -1, 38, -1, 40, -1, 46,
-1, 28, 36, 29, -1, 14, 27, -1, 37, -1,
5, 30, 36, -1, 5, 36, -1, 3, 30, 36,
-1, 3, 36, -1, 35, -1, 37, 30, 35, -1,
37, 30, -1, 17, 39, 18, -1, 17, 18, -1,
25, -1, 39, 21, 25, -1, 28, 41, 29, -1,
28, 44, 29, -1, 5, 30, 44, -1, 5, 41,
-1, 3, 30, 44, -1, 3, 41, -1, 32, 15,
27, -1, 42, -1, 22, 25, 30, 15, 27, -1,
43, -1, 44, 30, 35, -1, 44, 30, 43, -1,
44, 30, -1, 25, 15, 27, -1, 19, 47, 20,
-1, 19, 20, -1, 45, -1, 47, 21, 45, -1
31, -1, 28, 26, 31, -1, 25, -1, 28, 29,
-1, -1, 11, -1, 28, 12, -1, 13, -1, 12,
-1, 13, -1, 30, 31, -1, 5, 32, -1, 6,
32, -1, 3, 32, -1, 4, -1, 7, -1, 8,
-1, 5, 33, -1, 9, -1, 34, -1, 38, -1,
40, -1, 46, -1, 28, 36, 29, -1, 14, 27,
-1, 37, -1, 5, 30, 36, -1, 5, 36, -1,
3, 30, 36, -1, 3, 36, -1, 35, -1, 37,
30, 35, -1, 37, 30, -1, 17, 39, 18, -1,
17, 18, -1, 25, -1, 39, 21, 25, -1, 28,
41, 29, -1, 28, 44, 29, -1, 5, 30, 44,
-1, 5, 41, -1, 3, 30, 44, -1, 3, 41,
-1, 32, 15, 27, -1, 42, -1, 22, 25, 30,
15, 27, -1, 43, -1, 44, 30, 35, -1, 44,
30, 43, -1, 44, 30, -1, 25, 15, 27, -1,
19, 47, 20, -1, 19, 20, -1, 45, -1, 47,
21, 45, -1
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const unsigned short yyrline[] =
{
0, 44, 44, 48, 52, 58, 59, 62, 63, 72,
76, 82, 83, 101, 102, 105, 108, 111, 112, 120,
125, 133, 137, 145, 158, 165, 170, 171, 172, 173,
174, 180, 186, 192, 193, 198, 203, 207, 213, 217,
222, 231, 235, 241, 245, 255, 260, 267, 272, 277,
281, 287, 302, 303, 311, 312, 324, 331, 340, 348,
352, 358, 359
76, 82, 83, 96, 114, 115, 118, 121, 124, 125,
133, 138, 146, 150, 158, 171, 178, 183, 184, 185,
186, 187, 193, 199, 205, 206, 211, 216, 220, 226,
230, 235, 244, 248, 254, 258, 268, 273, 280, 285,
290, 294, 300, 315, 316, 324, 325, 337, 344, 353,
361, 365, 371, 372
};
#endif
@ -361,24 +362,24 @@ static const unsigned short yytoknum[] =
static const unsigned char yyr1[] =
{
0, 23, 24, 24, 24, 25, 25, 26, 26, 26,
26, 27, 27, 28, 28, 29, 30, 31, 31, 32,
32, 32, 32, 32, 32, 33, 33, 33, 33, 33,
33, 34, 35, 36, 36, 36, 36, 36, 37, 37,
37, 38, 38, 39, 39, 40, 40, 41, 41, 41,
41, 42, 43, 43, 44, 44, 44, 44, 45, 46,
46, 47, 47
26, 27, 27, 27, 28, 28, 29, 30, 31, 31,
32, 32, 32, 32, 32, 32, 33, 33, 33, 33,
33, 33, 34, 35, 36, 36, 36, 36, 36, 37,
37, 37, 38, 38, 39, 39, 40, 40, 41, 41,
41, 41, 42, 43, 43, 44, 44, 44, 44, 45,
46, 46, 47, 47
};
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
static const unsigned char yyr2[] =
{
0, 2, 1, 2, 0, 1, 1, 1, 2, 3,
3, 1, 0, 1, 2, 1, 1, 1, 2, 2,
2, 2, 1, 1, 1, 2, 1, 1, 1, 1,
1, 3, 2, 1, 3, 2, 3, 2, 1, 3,
2, 3, 2, 1, 3, 3, 3, 3, 2, 3,
2, 3, 1, 5, 1, 3, 3, 2, 3, 3,
2, 1, 3
3, 1, 2, 0, 1, 2, 1, 1, 1, 2,
2, 2, 2, 1, 1, 1, 2, 1, 1, 1,
1, 1, 3, 2, 1, 3, 2, 3, 2, 1,
3, 2, 3, 2, 1, 3, 3, 3, 3, 2,
3, 2, 3, 1, 5, 1, 3, 3, 2, 3,
3, 2, 1, 3
};
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@ -386,51 +387,51 @@ static const unsigned char yyr2[] =
means the default is an error. */
static const unsigned char yydefact[] =
{
4, 0, 26, 12, 13, 0, 0, 0, 0, 2,
27, 28, 29, 30, 25, 0, 22, 0, 0, 23,
24, 11, 6, 3, 0, 5, 7, 42, 43, 0,
60, 0, 61, 0, 1, 0, 0, 14, 12, 0,
0, 38, 0, 33, 0, 52, 54, 0, 8, 21,
0, 19, 0, 20, 0, 0, 0, 0, 41, 0,
12, 59, 0, 16, 0, 37, 50, 0, 35, 48,
32, 0, 12, 15, 31, 40, 45, 46, 57, 17,
0, 10, 9, 44, 58, 62, 0, 0, 36, 49,
34, 47, 0, 51, 39, 55, 56, 18, 0, 0,
12, 0, 0, 53
4, 0, 27, 13, 14, 0, 0, 0, 0, 2,
28, 29, 30, 31, 26, 0, 23, 0, 0, 24,
25, 11, 6, 3, 0, 5, 7, 43, 44, 0,
0, 61, 0, 62, 0, 1, 0, 0, 15, 13,
0, 0, 39, 0, 34, 0, 53, 55, 0, 8,
22, 0, 20, 0, 21, 0, 0, 16, 0, 12,
0, 42, 0, 13, 60, 0, 17, 0, 38, 51,
0, 36, 49, 33, 0, 13, 32, 41, 46, 47,
58, 18, 0, 10, 9, 45, 59, 63, 0, 0,
37, 50, 35, 48, 0, 52, 40, 56, 57, 19,
0, 0, 13, 0, 0, 54
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yysigned_char yydefgoto[] =
{
-1, 7, 21, 22, 23, 24, 74, 78, 81, 25,
26, 10, 41, 65, 43, 11, 29, 12, 44, 45,
46, 47, 32, 13, 33
-1, 7, 21, 22, 23, 29, 59, 80, 83, 25,
26, 10, 42, 68, 44, 11, 30, 12, 45, 46,
47, 48, 33, 13, 34
};
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
#define YYPACT_NINF -48
#define YYPACT_NINF -54
static const short yypact[] =
{
241, 252, -48, 219, -48, 202, 150, 13, 114, -48,
-48, -48, -48, -48, -48, 219, -48, 236, 299, -48,
-48, -48, -48, -48, 94, -48, -48, -48, -48, 4,
-48, 2, -48, -15, -48, 269, 269, -48, 219, 219,
6, -48, 23, 20, 23, -48, -48, 54, -48, -48,
299, -48, 299, -48, 168, 185, 75, 38, -48, 219,
219, -48, 219, -48, 126, -48, -48, 126, -48, -48,
-48, 20, 219, -48, -48, 12, -48, -48, 138, -48,
75, -48, -48, -48, -48, -48, 281, 281, -48, 20,
-48, 20, 37, -48, -48, -48, -48, -48, 79, 79,
219, 287, 287, -48
267, 278, -54, 245, -54, 228, 176, 8, 140, -54,
-54, -54, -54, -54, -54, 245, -54, 262, 325, -54,
-54, -54, -54, -54, 100, -54, -54, -54, -54, 120,
48, -54, -5, -54, 52, -54, 295, 295, -54, 245,
245, -3, -54, 13, 9, 13, -54, -54, 76, -54,
-54, 325, -54, 325, -54, 194, 211, -54, 108, -54,
103, -54, 245, 245, -54, 245, -54, 152, -54, -54,
152, -54, -54, -54, 9, 245, -54, 24, -54, -54,
164, -54, 108, -54, -54, -54, -54, -54, 307, 307,
-54, 9, -54, 9, 32, -54, -54, -54, -54, -54,
6, 6, 245, 313, 313, -54
};
/* YYPGOTO[NTERM-NUM]. */
static const yysigned_char yypgoto[] =
{
-48, -48, -2, 19, -37, 7, 21, -16, -47, -6,
14, -48, -33, -8, -48, -48, -48, -48, 41, -48,
-24, 11, 27, -48, -48
-54, -54, 31, -10, -35, 0, 12, -12, -53, -2,
41, -54, -47, -6, -54, -54, -54, -54, 44, -54,
-28, 15, 14, -54, -54
};
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
@ -440,72 +441,78 @@ static const yysigned_char yypgoto[] =
#define YYTABLE_NINF -1
static const unsigned char yytable[] =
{
42, 70, 40, 28, 31, 61, 62, 8, 8, 49,
82, 51, 53, 34, 9, 14, 42, 60, 57, 64,
67, 72, 58, 84, 8, 59, 38, 75, 68, 49,
51, 14, 63, 97, 48, 93, 73, 71, 64, 67,
80, 80, 94, 56, 49, 95, 51, 68, 49, 51,
63, 79, 100, 72, 96, 92, 88, 83, 40, 90,
31, 40, 8, 103, 80, 76, 63, 73, 77, 14,
98, 99, 40, 48, 0, 89, 66, 69, 91, 68,
49, 51, 101, 0, 102, 98, 99, 63, 79, 85,
88, 90, 0, 38, 68, 66, 69, 54, 16, 55,
18, 19, 20, 2, 0, 4, 37, 0, 38, 0,
0, 5, 0, 6, 0, 0, 39, 35, 16, 36,
18, 19, 20, 0, 0, 0, 37, 0, 38, 86,
16, 87, 18, 19, 20, 0, 39, 0, 0, 0,
38, 50, 16, 52, 18, 19, 20, 0, 39, 0,
0, 0, 38, 15, 16, 17, 18, 19, 20, 2,
39, 4, 0, 0, 0, 0, 0, 5, 0, 6,
30, 54, 16, 55, 18, 19, 20, 2, 0, 4,
63, 0, 38, 0, 0, 5, 0, 6, 35, 16,
55, 18, 19, 20, 2, 0, 4, 63, 0, 38,
0, 0, 5, 0, 6, 15, 16, 17, 18, 19,
20, 2, 0, 4, 0, 0, 0, 0, 0, 5,
27, 6, 15, 16, 17, 18, 19, 20, 2, 0,
4, 0, 0, 0, 0, 0, 5, 0, 6, 50,
16, 17, 18, 19, 20, 2, 1, 4, 0, 0,
2, 3, 4, 5, 0, 6, 0, 1, 5, 0,
6, 2, 0, 4, 0, 0, 0, 0, 0, 5,
0, 6, 35, 16, 36, 18, 19, 20, 0, 0,
0, 63, 0, 38, 86, 16, 87, 18, 19, 20,
101, 0, 102, 63, 0, 38, 0, 0, 0, 63,
0, 38, 50, 16, 52, 18, 19, 20
8, 8, 43, 24, 73, 49, 41, 84, 35, 103,
63, 104, 75, 50, 58, 52, 54, 8, 43, 58,
39, 66, 60, 43, 67, 70, 57, 60, 86, 99,
96, 71, 77, 97, 50, 52, 28, 32, 39, 24,
95, 9, 14, 67, 70, 49, 82, 102, 82, 50,
71, 52, 98, 50, 52, 76, 8, 78, 14, 0,
79, 90, 94, 24, 92, 41, 61, 105, 41, 62,
82, 74, 64, 65, 0, 24, 100, 101, 41, 87,
69, 72, 91, 71, 0, 93, 50, 52, 66, 57,
0, 100, 101, 85, 90, 92, 32, 14, 71, 69,
72, 0, 24, 55, 16, 56, 18, 19, 20, 2,
0, 4, 38, 57, 39, 66, 81, 5, 75, 6,
66, 81, 40, 55, 16, 56, 18, 19, 20, 2,
0, 4, 38, 0, 39, 0, 0, 5, 0, 6,
0, 0, 40, 36, 16, 37, 18, 19, 20, 0,
0, 0, 38, 0, 39, 88, 16, 89, 18, 19,
20, 0, 40, 0, 0, 0, 39, 51, 16, 53,
18, 19, 20, 0, 40, 0, 0, 0, 39, 15,
16, 17, 18, 19, 20, 2, 40, 4, 0, 0,
0, 0, 0, 5, 0, 6, 31, 55, 16, 56,
18, 19, 20, 2, 0, 4, 66, 0, 39, 0,
0, 5, 0, 6, 36, 16, 56, 18, 19, 20,
2, 0, 4, 66, 0, 39, 0, 0, 5, 0,
6, 15, 16, 17, 18, 19, 20, 2, 0, 4,
0, 0, 0, 0, 0, 5, 27, 6, 15, 16,
17, 18, 19, 20, 2, 0, 4, 0, 0, 0,
0, 0, 5, 0, 6, 51, 16, 17, 18, 19,
20, 2, 1, 4, 0, 0, 2, 3, 4, 5,
0, 6, 0, 1, 5, 0, 6, 2, 0, 4,
0, 0, 0, 0, 0, 5, 0, 6, 36, 16,
37, 18, 19, 20, 0, 0, 0, 66, 0, 39,
88, 16, 89, 18, 19, 20, 103, 0, 104, 66,
0, 39, 0, 0, 0, 66, 0, 39, 51, 16,
53, 18, 19, 20
};
static const yysigned_char yycheck[] =
{
8, 38, 8, 5, 6, 20, 21, 0, 1, 15,
57, 17, 18, 0, 0, 1, 24, 15, 24, 35,
36, 15, 18, 60, 17, 21, 14, 43, 36, 35,
36, 17, 12, 80, 15, 72, 13, 39, 54, 55,
56, 57, 75, 24, 50, 78, 52, 55, 54, 55,
12, 13, 15, 15, 78, 71, 64, 59, 64, 67,
62, 67, 55, 100, 80, 44, 12, 13, 47, 55,
86, 87, 78, 54, -1, 64, 35, 36, 67, 87,
86, 87, 3, -1, 5, 101, 102, 12, 13, 62,
98, 99, -1, 14, 102, 54, 55, 3, 4, 5,
0, 1, 8, 3, 39, 15, 8, 60, 0, 3,
15, 5, 15, 15, 24, 17, 18, 17, 24, 29,
14, 12, 24, 29, 36, 37, 13, 29, 63, 82,
77, 37, 44, 80, 36, 37, 5, 6, 14, 39,
75, 0, 1, 55, 56, 55, 58, 15, 60, 51,
56, 53, 80, 55, 56, 43, 56, 45, 17, -1,
48, 67, 74, 63, 70, 67, 18, 102, 70, 21,
82, 40, 20, 21, -1, 75, 88, 89, 80, 65,
36, 37, 67, 89, -1, 70, 88, 89, 12, 13,
-1, 103, 104, 62, 100, 101, 65, 56, 104, 55,
56, -1, 102, 3, 4, 5, 6, 7, 8, 9,
-1, 11, 12, 13, 14, 12, 13, 17, 15, 19,
12, 13, 22, 3, 4, 5, 6, 7, 8, 9,
-1, 11, 12, -1, 14, -1, -1, 17, -1, 19,
-1, -1, 22, 3, 4, 5, 6, 7, 8, -1,
-1, -1, 12, -1, 14, 3, 4, 5, 6, 7,
8, -1, 22, -1, -1, -1, 14, 3, 4, 5,
6, 7, 8, -1, 22, -1, -1, -1, 14, 3,
4, 5, 6, 7, 8, 9, 22, 11, -1, -1,
-1, -1, -1, 17, -1, 19, 20, 3, 4, 5,
6, 7, 8, 9, -1, 11, 12, -1, 14, -1,
-1, 17, -1, 19, -1, -1, 22, 3, 4, 5,
6, 7, 8, -1, -1, -1, 12, -1, 14, 3,
4, 5, 6, 7, 8, -1, 22, -1, -1, -1,
14, 3, 4, 5, 6, 7, 8, -1, 22, -1,
-1, -1, 14, 3, 4, 5, 6, 7, 8, 9,
22, 11, -1, -1, -1, -1, -1, 17, -1, 19,
20, 3, 4, 5, 6, 7, 8, 9, -1, 11,
12, -1, 14, -1, -1, 17, -1, 19, 3, 4,
5, 6, 7, 8, 9, -1, 11, 12, -1, 14,
-1, 17, -1, 19, 3, 4, 5, 6, 7, 8,
9, -1, 11, 12, -1, 14, -1, -1, 17, -1,
19, 3, 4, 5, 6, 7, 8, 9, -1, 11,
-1, -1, -1, -1, -1, 17, 18, 19, 3, 4,
5, 6, 7, 8, 9, -1, 11, -1, -1, -1,
-1, -1, 17, -1, 19, 3, 4, 5, 6, 7,
8, 9, -1, 11, -1, -1, -1, -1, -1, 17,
18, 19, 3, 4, 5, 6, 7, 8, 9, -1,
11, -1, -1, -1, -1, -1, 17, -1, 19, 3,
4, 5, 6, 7, 8, 9, 5, 11, -1, -1,
9, 10, 11, 17, -1, 19, -1, 5, 17, -1,
19, 9, -1, 11, -1, -1, -1, -1, -1, 17,
-1, 19, 3, 4, 5, 6, 7, 8, -1, -1,
-1, 12, -1, 14, 3, 4, 5, 6, 7, 8,
3, -1, 5, 12, -1, 14, -1, -1, -1, 12,
-1, 14, 3, 4, 5, 6, 7, 8
8, 9, 5, 11, -1, -1, 9, 10, 11, 17,
-1, 19, -1, 5, 17, -1, 19, 9, -1, 11,
-1, -1, -1, -1, -1, 17, -1, 19, 3, 4,
5, 6, 7, 8, -1, -1, -1, 12, -1, 14,
3, 4, 5, 6, 7, 8, 3, -1, 5, 12,
-1, 14, -1, -1, -1, 12, -1, 14, 3, 4,
5, 6, 7, 8
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@ -514,15 +521,15 @@ static const unsigned char yystos[] =
{
0, 5, 9, 10, 11, 17, 19, 24, 28, 33,
34, 38, 40, 46, 33, 3, 4, 5, 6, 7,
8, 25, 26, 27, 28, 32, 33, 18, 25, 39,
20, 25, 45, 47, 0, 3, 5, 12, 14, 22,
32, 35, 36, 37, 41, 42, 43, 44, 26, 32,
3, 32, 5, 32, 3, 5, 26, 32, 18, 21,
15, 20, 21, 12, 30, 36, 41, 30, 36, 41,
27, 25, 15, 13, 29, 30, 29, 29, 30, 13,
30, 31, 31, 25, 27, 45, 3, 5, 36, 44,
36, 44, 30, 27, 35, 35, 43, 31, 30, 30,
15, 3, 5, 27
8, 25, 26, 27, 28, 32, 33, 18, 25, 28,
39, 20, 25, 45, 47, 0, 3, 5, 12, 14,
22, 32, 35, 36, 37, 41, 42, 43, 44, 26,
32, 3, 32, 5, 32, 3, 5, 13, 26, 29,
32, 18, 21, 15, 20, 21, 12, 30, 36, 41,
30, 36, 41, 27, 25, 15, 29, 30, 29, 29,
30, 13, 30, 31, 31, 25, 27, 45, 3, 5,
36, 44, 36, 44, 30, 27, 35, 35, 43, 31,
30, 30, 15, 3, 5, 27
};
#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
@ -1139,16 +1146,32 @@ yyreduce:
}
break;
case 19:
#line 121 "gram.y"
case 13:
#line 97 "gram.y"
{
SyckNode *n = syck_new_str( "" );
if ( ((SyckParser *)parser)->taguri_expansion == 1 )
{
n->type_id = syck_taguri( YAML_DOMAIN, "null", 4 );
}
else
{
n->type_id = syck_strndup( "null", 4 );
}
yyval.nodeData = n;
}
break;
case 20:
#line 134 "gram.y"
{
syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, ((SyckParser *)parser)->taguri_expansion );
yyval.nodeData = yyvsp[0].nodeData;
}
break;
case 20:
#line 126 "gram.y"
case 21:
#line 139 "gram.y"
{
if ( ((SyckParser *)parser)->implicit_typing == 1 )
{
@ -1158,26 +1181,26 @@ yyreduce:
}
break;
case 21:
#line 134 "gram.y"
case 22:
#line 147 "gram.y"
{
yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-1].name, yyvsp[0].nodeData );
}
break;
case 22:
#line 138 "gram.y"
case 23:
#line 151 "gram.y"
{
/*
* _Aliases_: The anchor symbol table is scanned for the anchor name.
* The anchor's ID in the language's symbol table is returned.
*/
yyval.nodeData = syck_hdlr_add_alias( (SyckParser *)parser, yyvsp[0].name );
yyval.nodeData = syck_hdlr_get_anchor( (SyckParser *)parser, yyvsp[0].name );
}
break;
case 23:
#line 146 "gram.y"
case 24:
#line 159 "gram.y"
{
SyckNode *n = yyvsp[0].nodeData;
if ( ((SyckParser *)parser)->taguri_expansion == 1 )
@ -1192,119 +1215,111 @@ yyreduce:
}
break;
case 25:
#line 166 "gram.y"
case 26:
#line 179 "gram.y"
{
syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, ((SyckParser *)parser)->taguri_expansion );
yyval.nodeData = yyvsp[0].nodeData;
}
break;
case 31:
#line 181 "gram.y"
case 32:
#line 194 "gram.y"
{
yyval.nodeData = yyvsp[-1].nodeData;
}
break;
case 32:
#line 187 "gram.y"
case 33:
#line 200 "gram.y"
{
yyval.nodeId = syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData );
}
break;
case 34:
#line 194 "gram.y"
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 35:
#line 199 "gram.y"
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 36:
#line 204 "gram.y"
case 37:
#line 217 "gram.y"
{
yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-2].name, yyvsp[0].nodeData );
}
break;
case 37:
#line 208 "gram.y"
case 38:
#line 221 "gram.y"
{
yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-1].name, yyvsp[0].nodeData );
}
break;
case 38:
#line 214 "gram.y"
case 39:
#line 227 "gram.y"
{
yyval.nodeData = syck_new_seq( yyvsp[0].nodeId );
}
break;
case 39:
#line 218 "gram.y"
case 40:
#line 231 "gram.y"
{
syck_seq_add( yyvsp[-2].nodeData, yyvsp[0].nodeId );
yyval.nodeData = yyvsp[-2].nodeData;
}
break;
case 40:
#line 223 "gram.y"
case 41:
#line 236 "gram.y"
{
yyval.nodeData = yyvsp[-1].nodeData;
}
break;
case 41:
#line 232 "gram.y"
case 42:
#line 245 "gram.y"
{
yyval.nodeData = yyvsp[-1].nodeData;
}
break;
case 42:
#line 236 "gram.y"
case 43:
#line 249 "gram.y"
{
yyval.nodeData = syck_alloc_seq();
}
break;
case 43:
#line 242 "gram.y"
case 44:
#line 255 "gram.y"
{
yyval.nodeData = syck_new_seq( syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData ) );
}
break;
case 44:
#line 246 "gram.y"
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 45:
#line 256 "gram.y"
{
apply_seq_in_map( (SyckParser *)parser, yyvsp[-1].nodeData );
yyval.nodeData = yyvsp[-1].nodeData;
}
break;
case 46:
#line 261 "gram.y"
#line 269 "gram.y"
{
apply_seq_in_map( (SyckParser *)parser, yyvsp[-1].nodeData );
yyval.nodeData = yyvsp[-1].nodeData;
@ -1312,37 +1327,45 @@ yyreduce:
break;
case 47:
#line 268 "gram.y"
#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 );
yyval.nodeData = yyvsp[0].nodeData;
}
break;
case 48:
#line 273 "gram.y"
case 49:
#line 286 "gram.y"
{
syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, ((SyckParser *)parser)->taguri_expansion );
yyval.nodeData = yyvsp[0].nodeData;
}
break;
case 49:
#line 278 "gram.y"
case 50:
#line 291 "gram.y"
{
yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-2].name, yyvsp[0].nodeData );
}
break;
case 50:
#line 282 "gram.y"
case 51:
#line 295 "gram.y"
{
yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-1].name, yyvsp[0].nodeData );
}
break;
case 51:
#line 288 "gram.y"
case 52:
#line 301 "gram.y"
{
yyval.nodeData = syck_new_map(
syck_hdlr_add_node( (SyckParser *)parser, yyvsp[-2].nodeData ),
@ -1350,8 +1373,8 @@ yyreduce:
}
break;
case 53:
#line 304 "gram.y"
case 54:
#line 317 "gram.y"
{
yyval.nodeData = syck_new_map(
syck_hdlr_add_node( (SyckParser *)parser, yyvsp[-3].nodeData ),
@ -1359,8 +1382,8 @@ yyreduce:
}
break;
case 55:
#line 313 "gram.y"
case 56:
#line 326 "gram.y"
{
if ( yyvsp[-2].nodeData->shortcut == NULL )
{
@ -1374,8 +1397,8 @@ yyreduce:
}
break;
case 56:
#line 325 "gram.y"
case 57:
#line 338 "gram.y"
{
apply_seq_in_map( (SyckParser *)parser, yyvsp[-2].nodeData );
syck_map_update( yyvsp[-2].nodeData, yyvsp[0].nodeData );
@ -1384,15 +1407,15 @@ yyreduce:
}
break;
case 57:
#line 332 "gram.y"
case 58:
#line 345 "gram.y"
{
yyval.nodeData = yyvsp[-1].nodeData;
}
break;
case 58:
#line 341 "gram.y"
case 59:
#line 354 "gram.y"
{
yyval.nodeData = syck_new_map(
syck_hdlr_add_node( (SyckParser *)parser, yyvsp[-2].nodeData ),
@ -1400,22 +1423,22 @@ yyreduce:
}
break;
case 59:
#line 349 "gram.y"
case 60:
#line 362 "gram.y"
{
yyval.nodeData = yyvsp[-1].nodeData;
}
break;
case 60:
#line 353 "gram.y"
case 61:
#line 366 "gram.y"
{
yyval.nodeData = syck_alloc_map();
}
break;
case 62:
#line 360 "gram.y"
case 63:
#line 373 "gram.y"
{
syck_map_update( yyvsp[-2].nodeData, yyvsp[0].nodeData );
syck_free_node( yyvsp[0].nodeData );
@ -1427,7 +1450,7 @@ yyreduce:
}
/* Line 1016 of /usr/local/share/bison/yacc.c. */
#line 1431 "y.tab.c"
#line 1454 "y.tab.c"
yyvsp -= yylen;
yyssp -= yylen;
@ -1646,7 +1669,7 @@ yyreturn:
}
#line 367 "gram.y"
#line 380 "gram.y"
void

View file

@ -31,6 +31,18 @@ SyckNode *
syck_hdlr_add_anchor( SyckParser *p, char *a, SyckNode *n )
{
n->anchor = a;
if ( p->bad_anchors != NULL )
{
SyckNode *bad;
if ( st_lookup( p->bad_anchors, (st_data_t)a, (st_data_t *)&bad ) )
{
if ( n->kind != syck_str_kind )
{
n->id = bad->id;
(p->handler)( p, n );
}
}
}
if ( p->anchors == NULL )
{
p->anchors = st_init_strtable();
@ -39,23 +51,50 @@ syck_hdlr_add_anchor( SyckParser *p, char *a, SyckNode *n )
return n;
}
SyckNode *
syck_hdlr_add_alias( SyckParser *p, char *a )
void
syck_hdlr_remove_anchor( SyckParser *p, char *a )
{
SyckNode *n;
if ( p->anchors == NULL )
{
p->anchors = st_init_strtable();
}
st_insert( p->anchors, (st_data_t)a, (st_data_t)1 );
}
SyckNode *
syck_hdlr_get_anchor( SyckParser *p, char *a )
{
SyckNode *n = NULL;
if ( p->anchors != NULL )
{
if ( st_lookup( p->anchors, (st_data_t)a, (st_data_t *)&n ) )
{
return n;
}
if ( st_lookup( p->anchors, (st_data_t)a, (st_data_t *)&n ) )
{
if ( n != (void *)1 )
{
return n;
}
else
{
if ( p->bad_anchors == NULL )
{
p->bad_anchors = st_init_strtable();
}
if ( ! st_lookup( p->bad_anchors, (st_data_t)a, (st_data_t *)&n ) )
{
n = (p->bad_anchor_handler)( p, a );
st_insert( p->bad_anchors, (st_data_t)a, (st_data_t)n );
}
}
}
}
//
// FIXME: Return an InvalidAnchor object
//
return syck_new_str( "..." );
if ( n == NULL )
{
n = (p->bad_anchor_handler)( p, a );
}
n->anchor = a;
return n;
}
void

View file

@ -12,12 +12,23 @@
#include <sys/types.h>
#include <time.h>
typedef struct RVALUE {
union {
struct RBasic basic;
struct RObject object;
struct RClass klass;
struct RArray array;
struct RHash hash;
struct RStruct rstruct;
} as;
} RVALUE;
#define RUBY_DOMAIN "ruby.yaml.org,2002"
static ID s_utc, s_at, s_to_f, s_read, s_binmode;
static ID s_new, s_utc, s_at, s_to_f, s_read, s_binmode, s_call, s_transfer;
static VALUE sym_model, sym_generic;
static VALUE sym_scalar, sym_seq, sym_map;
VALUE cParser, cLoader, cNode, oDefaultLoader;
VALUE cDate, cParser, cLoader, cNode, cPrivateType, cDomainType, cBadAlias, oDefaultLoader;
/*
* my private collection of numerical oddities.
@ -32,6 +43,7 @@ static VALUE syck_node_transform( VALUE );
SYMID rb_syck_parse_handler _((SyckParser *, SyckNode *));
SYMID rb_syck_load_handler _((SyckParser *, SyckNode *));
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-dev:8067] problem
@ -249,7 +261,7 @@ rb_syck_parse_handler(p, n)
bonus = (struct parser_xtra *)p->bonus;
if ( bonus->proc != 0 )
{
rb_funcall(bonus->proc, rb_intern("call"), 1, v);
rb_funcall(bonus->proc, s_call, 1, v);
}
rb_iv_set(obj, "@value", v);
@ -333,9 +345,28 @@ rb_syck_load_handler(p, n)
}
else if ( strcmp( n->type_id, "timestamp#ymd" ) == 0 )
{
S_REALLOC_N( n->data.str->ptr, char, 22 );
strcat( n->data.str->ptr, "t00:00:00Z" );
obj = rb_syck_mktime( n->data.str->ptr );
char *ptr = n->data.str->ptr;
VALUE year, mon, day;
// Year
ptr[4] = '\0';
year = INT2FIX(strtol(ptr, NULL, 10));
// Month
ptr += 4;
while ( !isdigit( *ptr ) ) ptr++;
mon = INT2FIX(strtol(ptr, NULL, 10));
// Day
ptr += 2;
while ( !isdigit( *ptr ) ) ptr++;
day = INT2FIX(strtol(ptr, NULL, 10));
obj = rb_funcall( cDate, s_new, 3, year, mon, day );
// S_REALLOC_N( n->data.str->ptr, char, 22 );
// strcat( n->data.str->ptr, "t00:00:00Z" );
// obj = rb_syck_mktime( n->data.str->ptr );
}
else if ( strncmp( n->type_id, "timestamp", 9 ) == 0 )
{
@ -367,15 +398,25 @@ rb_syck_load_handler(p, n)
break;
}
//
// 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);
MEMZERO((void *)obj, RVALUE, 1);
obj = n->id;
}
bonus = (struct parser_xtra *)p->bonus;
if ( bonus->proc != 0 )
{
rb_funcall(bonus->proc, rb_intern("call"), 1, obj);
rb_funcall(bonus->proc, s_call, 1, obj);
}
if ( check_transfers == 1 && n->type_id != NULL )
{
obj = rb_funcall( oDefaultLoader, rb_intern( "transfer" ), 2, rb_str_new2( n->type_id ), obj );
obj = rb_funcall( oDefaultLoader, s_transfer, 2, rb_str_new2( n->type_id ), obj );
}
rb_hash_aset(bonus->data, INT2FIX(RHASH(bonus->data)->tbl->num_entries), obj);
@ -403,6 +444,16 @@ rb_syck_err_handler(p, msg)
p->lineptr);
}
SyckNode *
rb_syck_bad_anchor_handler(p, a)
SyckParser *p;
char *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 );
return badanc;
}
/*
* data loaded based on the model requested.
*/
@ -414,17 +465,17 @@ syck_set_model( parser, model )
if ( model == sym_generic )
{
syck_parser_handler( parser, rb_syck_parse_handler );
syck_parser_error_handler( parser, rb_syck_err_handler );
syck_parser_implicit_typing( parser, 1 );
syck_parser_taguri_expansion( parser, 1 );
}
else
{
syck_parser_handler( parser, rb_syck_load_handler );
syck_parser_error_handler( parser, rb_syck_err_handler );
syck_parser_implicit_typing( parser, 1 );
syck_parser_taguri_expansion( parser, 0 );
}
syck_parser_error_handler( parser, rb_syck_err_handler );
syck_parser_bad_anchor_handler( parser, rb_syck_bad_anchor_handler );
}
/*
@ -561,7 +612,7 @@ syck_parser_load_documents(argc, argv, self)
}
/* Pass document to block */
rb_funcall( proc, rb_intern("call"), 1, v );
rb_funcall( proc, s_call, 1, v );
}
return Qnil;
@ -732,7 +783,7 @@ syck_loader_transfer( self, type, val )
if ( taguri != NULL )
{
VALUE scheme, name, type_hash, type_proc;
VALUE scheme, domain, name, type_hash, type_proc = Qnil;
VALUE type_uri = rb_str_new2( taguri );
VALUE str_taguri = rb_str_new2("taguri");
VALUE str_xprivate = rb_str_new2("x-private");
@ -748,7 +799,7 @@ syck_loader_transfer( self, type, val )
}
else if ( rb_str_cmp( scheme, str_taguri ) == 0 )
{
VALUE domain = rb_ary_shift( parts );
domain = rb_ary_shift( parts );
name = rb_ary_join( parts, rb_str_new2( ":" ) );
type_hash = rb_iv_get(self, "@families");
type_hash = rb_hash_aref(type_hash, domain);
@ -773,15 +824,59 @@ syck_loader_transfer( self, type, val )
// rb_funcall(rb_mKernel, rb_intern("p"), 2, name, type_proc);
}
if ( rb_respond_to( type_proc, rb_intern("call") ) )
if ( rb_respond_to( type_proc, s_call ) )
{
val = rb_funcall(type_proc, rb_intern("call"), 2, type_uri, val);
val = rb_funcall(type_proc, s_call, 2, type_uri, val);
}
else if ( rb_str_cmp( scheme, str_xprivate ) == 0 )
{
val = rb_funcall(cPrivateType, s_new, 2, name, val);
}
else
{
val = rb_funcall(cDomainType, s_new, 3, domain, name, val);
}
}
return val;
}
/*
* YAML::Syck::BadAlias.initialize
*/
VALUE
syck_badalias_initialize( self, val )
VALUE self, val;
{
rb_iv_set( self, "@name", val );
return self;
}
/*
* YAML::Syck::DomainType.initialize
*/
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 );
return self;
}
/*
* YAML::Syck::PrivateType.initialize
*/
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 );
return self;
}
/*
* YAML::Syck::Node.initialize
*/
@ -838,7 +933,7 @@ syck_node_transform( self )
{
t = val;
}
return rb_funcall( oDefaultLoader, rb_intern( "transfer" ), 2, type_id, t );
return rb_funcall( oDefaultLoader, s_transfer, 2, type_id, t );
}
/*
@ -854,17 +949,26 @@ Init_syck()
//
// Global symbols
//
s_new = rb_intern("new");
s_utc = rb_intern("utc");
s_at = rb_intern("at");
s_to_f = rb_intern("to_f");
s_read = rb_intern("read");
s_binmode = rb_intern("binmode");
s_transfer = rb_intern("transfer");
s_call = rb_intern("call");
sym_model = ID2SYM(rb_intern("Model"));
sym_generic = ID2SYM(rb_intern("Generic"));
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
//
@ -902,5 +1006,29 @@ Init_syck()
rb_define_attr( cNode, "anchor", 1, 1 );
rb_define_method( cNode, "initialize", syck_node_initialize, 2);
rb_define_method( cNode, "transform", syck_node_transform, 0);
//
// 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
//
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
//
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);
}

View file

@ -170,6 +170,7 @@ syck_new_parser()
p->io.str = NULL;
p->syms = NULL;
p->anchors = NULL;
p->bad_anchors = NULL;
p->implicit_typing = 1;
p->taguri_expansion = 0;
p->bufsize = SYCK_BUFFERSIZE;
@ -219,7 +220,7 @@ syck_st_free( SyckParser *p )
}
//
// Free the anchor table
// Free the anchor tables
//
if ( p->anchors != NULL )
{
@ -227,6 +228,13 @@ syck_st_free( SyckParser *p )
st_free_table( p->anchors );
p->anchors = NULL;
}
if ( p->bad_anchors != NULL )
{
st_foreach( p->bad_anchors, syck_st_free_nodes, 0 );
st_free_table( p->bad_anchors );
p->bad_anchors = NULL;
}
}
void
@ -277,6 +285,13 @@ syck_parser_error_handler( SyckParser *p, SyckErrorHandler hdlr )
p->error_handler = hdlr;
}
void
syck_parser_bad_anchor_handler( SyckParser *p, SyckBadAnchorHandler hdlr )
{
ASSERT( p != NULL );
p->bad_anchor_handler = hdlr;
}
void
syck_parser_file( SyckParser *p, FILE *fp, SyckIoFileRead read )
{

View file

@ -121,6 +121,7 @@ struct _syck_node {
*/
typedef SYMID (*SyckNodeHandler)(SyckParser *, SyckNode *);
typedef void (*SyckErrorHandler)(SyckParser *, char *);
typedef SyckNode * (*SyckBadAnchorHandler)(SyckParser *, char *);
typedef long (*SyckIoFileRead)(char *, SyckIoFile *, long, long);
typedef long (*SyckIoStrRead)(char *, SyckIoStr *, long, long);
@ -150,6 +151,8 @@ struct _syck_parser {
SyckNodeHandler handler;
// Error handler
SyckErrorHandler error_handler;
// InvalidAnchor handler
SyckBadAnchorHandler bad_anchor_handler;
// IO type
enum syck_io_type io_type;
// Custom buffer size
@ -174,8 +177,8 @@ struct _syck_parser {
SyckIoStrRead read;
} *str;
} io;
// Symbol table
st_table *anchors;
// Symbol table for anchors
st_table *anchors, *bad_anchors;
// Optional symbol table for SYMIDs
st_table *syms;
// Levels of indentation
@ -194,7 +197,8 @@ struct _syck_parser {
*/
SYMID syck_hdlr_add_node( SyckParser *, SyckNode * );
SyckNode *syck_hdlr_add_anchor( SyckParser *, char *, SyckNode * );
SyckNode *syck_hdlr_add_alias( SyckParser *, char * );
void syck_hdlr_remove_anchor( SyckParser *, char * );
SyckNode *syck_hdlr_get_anchor( SyckParser *, char * );
void syck_add_transfer( char *, SyckNode *, int );
char *syck_xprivate( char *, int );
char *syck_taguri( char *, char *, int );
@ -218,6 +222,7 @@ void syck_parser_implicit_typing( SyckParser *, int );
void syck_parser_taguri_expansion( SyckParser *, int );
void syck_parser_handler( SyckParser *, SyckNodeHandler );
void syck_parser_error_handler( SyckParser *, SyckErrorHandler );
void syck_parser_bad_anchor_handler( SyckParser *, SyckBadAnchorHandler );
void syck_parser_file( SyckParser *, FILE *, SyckIoFileRead );
void syck_parser_str( SyckParser *, char *, long, SyckIoStrRead );
void syck_parser_str_auto( SyckParser *, char *, SyckIoStrRead );

File diff suppressed because it is too large Load diff

View file

@ -451,17 +451,9 @@ class Time
end
end
YAML.add_builtin_type( 'time' ) { |type, val|
if val =~ /\A(\d{4})\-(\d{1,2})\-(\d{1,2})[Tt](\d{2})\:(\d{2})\:(\d{2})(\.\d{1,2})?(Z|[-+][0-9][0-9](?:\:[0-9][0-9])?)\Z/
YAML.mktime( *$~.to_a[1,8] )
elsif val =~ /\A(\d{4})\-(\d{1,2})\-(\d{1,2})[ \t]+(\d{2})\:(\d{2})\:(\d{2})(\.\d+)?[ \t]+(Z|[-+][0-9][0-9](?:\:[0-9][0-9])?)\Z/
YAML.mktime( *$~.to_a[1,8] )
elsif val =~ /\A(\d{4})\-(\d{1,2})\-(\d{1,2})[ \t]+(\d{2})\:(\d{2})\:(\d{2})(\.\d{1,2})?\Z/
YAML.mktime( *$~.to_a[1,7] )
elsif val =~ /\A(\d{4})\-(\d{1,2})\-(\d{1,2})\Z/
YAML.add_builtin_type( 'time#ymd' ) { |type, val|
if val =~ /\A(\d{4})\-(\d{1,2})\-(\d{1,2})\Z/
Date.new($1.to_i, $2.to_i, $3.to_i)
elsif type == :Implicit
:InvalidType
else
raise YAML::TypeError, "Invalid !time string: " + val.inspect
end