* lib/yaml/rubytypes.rb: object and struct loading

* lib/yaml.rb: YAML::detect_implicit will discover typing for a Ruby string

* ext/syck/: Fixed portable comments, misuse of NULL and methods without return VALUEs.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3784 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
why 2003-05-13 06:34:18 +00:00
Родитель cea30a129a
Коммит bd810795c5
10 изменённых файлов: 435 добавлений и 401 удалений

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

@ -229,16 +229,16 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */ /* YYFINAL -- State number of the termination state. */
#define YYFINAL 32 #define YYFINAL 32
#define YYLAST 132 #define YYLAST 186
/* YYNTOKENS -- Number of terminals. */ /* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 23 #define YYNTOKENS 23
/* YYNNTS -- Number of nonterminals. */ /* YYNNTS -- Number of nonterminals. */
#define YYNNTS 21 #define YYNNTS 21
/* YYNRULES -- Number of rules. */ /* YYNRULES -- Number of rules. */
#define YYNRULES 46 #define YYNRULES 47
/* YYNRULES -- Number of states. */ /* YYNRULES -- Number of states. */
#define YYNSTATES 73 #define YYNSTATES 78
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
#define YYUNDEFTOK 2 #define YYUNDEFTOK 2
@ -287,8 +287,8 @@ static const unsigned char yyprhs[] =
0, 0, 3, 5, 8, 9, 11, 13, 16, 18, 0, 0, 3, 5, 8, 9, 11, 13, 16, 18,
22, 24, 25, 27, 30, 32, 34, 37, 40, 42, 22, 24, 25, 27, 30, 32, 34, 37, 40, 42,
44, 47, 49, 51, 53, 55, 57, 61, 64, 66, 44, 47, 49, 51, 53, 55, 57, 61, 64, 66,
70, 73, 77, 80, 82, 86, 90, 94, 96, 102, 70, 73, 77, 80, 82, 86, 90, 96, 100, 102,
104, 108, 111, 115, 119, 122, 124 108, 110, 114, 117, 121, 125, 128, 130
}; };
/* YYRHS -- A `-1'-separated list of the rules' RHS. */ /* YYRHS -- A `-1'-separated list of the rules' RHS. */
@ -303,10 +303,11 @@ static const yysigned_char yyrhs[] =
-1, 14, 26, -1, 33, -1, 34, 29, 33, -1, -1, 14, 26, -1, 33, -1, 34, 29, 33, -1,
34, 29, -1, 17, 36, 18, -1, 17, 18, -1, 34, 29, -1, 17, 36, 18, -1, 17, 18, -1,
25, -1, 36, 21, 25, -1, 27, 40, 28, -1, 25, -1, 36, 21, 25, -1, 27, 40, 28, -1,
30, 15, 26, -1, 38, -1, 22, 25, 29, 15, 27, 5, 29, 40, 28, -1, 30, 15, 26, -1,
26, -1, 39, -1, 40, 29, 39, -1, 40, 29, 38, -1, 22, 25, 29, 15, 26, -1, 39, -1,
-1, 25, 15, 26, -1, 19, 43, 20, -1, 19, 40, 29, 39, -1, 40, 29, -1, 25, 15, 26,
20, -1, 41, -1, 43, 21, 41, -1 -1, 19, 43, 20, -1, 19, 20, -1, 41, -1,
43, 21, 41, -1
}; };
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
@ -315,8 +316,8 @@ static const unsigned short yyrline[] =
0, 44, 44, 48, 52, 58, 59, 60, 69, 77, 0, 44, 44, 48, 52, 58, 59, 60, 69, 77,
83, 84, 102, 103, 106, 109, 117, 122, 130, 143, 83, 84, 102, 103, 106, 109, 117, 122, 130, 143,
150, 155, 156, 157, 158, 159, 165, 171, 177, 181, 150, 155, 156, 157, 158, 159, 165, 171, 177, 181,
186, 195, 199, 205, 209, 219, 225, 240, 241, 249, 186, 195, 199, 205, 209, 219, 223, 230, 245, 246,
250, 255, 264, 272, 276, 282, 283 254, 255, 260, 269, 277, 281, 287, 288
}; };
#endif #endif
@ -353,8 +354,8 @@ static const unsigned char yyr1[] =
0, 23, 24, 24, 24, 25, 25, 25, 25, 25, 0, 23, 24, 24, 24, 25, 25, 25, 25, 25,
26, 26, 27, 27, 28, 29, 30, 30, 30, 30, 26, 26, 27, 27, 28, 29, 30, 30, 30, 30,
31, 31, 31, 31, 31, 31, 32, 33, 34, 34, 31, 31, 31, 31, 31, 31, 32, 33, 34, 34,
34, 35, 35, 36, 36, 37, 38, 39, 39, 40, 34, 35, 35, 36, 36, 37, 37, 38, 39, 39,
40, 40, 41, 42, 42, 43, 43 40, 40, 40, 41, 42, 42, 43, 43
}; };
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
@ -363,8 +364,8 @@ static const unsigned char yyr2[] =
0, 2, 1, 2, 0, 1, 1, 2, 1, 3, 0, 2, 1, 2, 0, 1, 1, 2, 1, 3,
1, 0, 1, 2, 1, 1, 2, 2, 1, 1, 1, 0, 1, 2, 1, 1, 2, 2, 1, 1,
2, 1, 1, 1, 1, 1, 3, 2, 1, 3, 2, 1, 1, 1, 1, 1, 3, 2, 1, 3,
2, 3, 2, 1, 3, 3, 3, 1, 5, 1, 2, 3, 2, 1, 3, 3, 5, 3, 1, 5,
3, 2, 3, 3, 2, 1, 3 1, 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
@ -374,43 +375,43 @@ static const unsigned char yydefact[] =
{ {
4, 0, 21, 0, 12, 0, 0, 0, 0, 2, 4, 0, 21, 0, 12, 0, 0, 0, 0, 2,
22, 23, 24, 25, 20, 0, 8, 0, 0, 18, 22, 23, 24, 25, 20, 0, 8, 0, 0, 18,
19, 3, 0, 5, 6, 32, 33, 0, 44, 0, 19, 3, 0, 5, 6, 32, 33, 0, 45, 0,
45, 0, 1, 0, 13, 11, 0, 0, 28, 0, 46, 0, 1, 0, 13, 11, 0, 0, 28, 0,
37, 39, 0, 7, 16, 17, 0, 5, 31, 0, 38, 40, 0, 7, 16, 0, 17, 0, 0, 5,
11, 43, 0, 10, 27, 0, 11, 15, 14, 26, 31, 0, 11, 44, 0, 15, 0, 10, 27, 0,
30, 35, 41, 9, 34, 42, 46, 0, 36, 29, 11, 14, 26, 30, 35, 42, 9, 34, 43, 47,
40, 11, 38 0, 0, 37, 29, 41, 36, 11, 39
}; };
/* YYDEFGOTO[NTERM-NUM]. */ /* YYDEFGOTO[NTERM-NUM]. */
static const yysigned_char yydefgoto[] = static const yysigned_char yydefgoto[] =
{ {
-1, 7, 53, 54, 22, 59, 60, 23, 24, 10, -1, 7, 57, 58, 22, 62, 56, 23, 24, 10,
38, 39, 11, 27, 12, 40, 41, 42, 30, 13, 38, 39, 11, 27, 12, 40, 41, 42, 30, 13,
31 31
}; };
/* 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 -49 #define YYPACT_NINF -45
static const yysigned_char yypact[] = static const short yypact[] =
{ {
7, 113, -49, 97, -49, 80, 52, 15, 68, -49, 156, 167, -45, 121, -45, 104, 76, 19, 92, -45,
-49, -49, -49, -49, -49, 97, -49, 104, 88, -49, -45, -45, -45, -45, -45, 121, -45, 151, 111, -45,
-49, -49, 24, -49, -49, -49, -49, 19, -49, 4, -45, -45, 56, -45, -45, -45, -45, 8, -45, 9,
-49, 28, -49, 88, -49, 97, 97, 6, -49, 32, -45, -3, -45, 39, -45, 121, 121, 12, -45, 18,
-49, -49, 32, -49, -49, -49, 26, 6, -49, 97, -45, -45, 18, -45, -45, 111, -45, 136, 22, 12,
97, -49, 97, -49, -49, 30, 97, -49, -49, -49, -45, 121, 121, -45, 121, -45, 83, -45, -45, 24,
39, -49, 59, -49, -49, -49, -49, 47, -49, -49, 121, -45, -45, 26, -45, 83, -45, -45, -45, -45,
-49, 97, -49 18, 23, -45, -45, -45, -45, 121, -45
}; };
/* YYPGOTO[NTERM-NUM]. */ /* YYPGOTO[NTERM-NUM]. */
static const yysigned_char yypgoto[] = static const yysigned_char yypgoto[] =
{ {
-49, -49, -2, -48, 5, -35, 37, -8, 51, -49, -45, -45, -2, -44, 6, -27, -37, -8, 11, -45,
10, -49, -49, -49, -49, -49, 16, -49, 25, -49, -22, -45, -45, -45, -45, -45, -23, -6, 0, -45,
-49 -45
}; };
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
@ -420,38 +421,48 @@ static const yysigned_char yypgoto[] =
#define YYTABLE_NINF -1 #define YYTABLE_NINF -1
static const unsigned char yytable[] = static const unsigned char yytable[] =
{ {
37, 21, 65, 26, 29, 8, 8, 61, 68, 44, 37, 21, 63, 26, 29, 65, 8, 8, 68, 44,
45, 63, 1, 43, 47, 32, 2, 3, 4, 50, 46, 9, 14, 43, 49, 64, 72, 53, 54, 32,
46, 56, 8, 72, 5, 44, 6, 15, 16, 17, 48, 66, 71, 8, 52, 44, 50, 60, 14, 51,
18, 19, 20, 2, 55, 4, 34, 48, 35, 58, 55, 61, 77, 65, 59, 61, 55, 44, 76, 44,
49, 5, 57, 6, 57, 58, 36, 64, 51, 52, 35, 73, 74, 75, 45, 18, 19, 20, 37, 67,
29, 9, 14, 35, 37, 15, 16, 17, 18, 19, 70, 55, 29, 8, 69, 0, 0, 37, 14, 15,
20, 2, 71, 4, 33, 18, 19, 20, 14, 5, 16, 47, 18, 19, 20, 2, 0, 4, 34, 0,
69, 6, 28, 33, 18, 19, 20, 66, 70, 62, 35, 0, 0, 5, 0, 6, 0, 0, 36, 15,
34, 36, 35, 15, 16, 17, 18, 19, 20, 2, 16, 17, 18, 19, 20, 2, 0, 4, 45, 18,
36, 4, 67, 33, 18, 19, 20, 5, 25, 6, 19, 20, 0, 5, 0, 6, 28, 33, 18, 19,
15, 16, 17, 18, 19, 20, 2, 0, 4, 17, 20, 0, 0, 0, 34, 36, 35, 15, 16, 17,
18, 19, 20, 2, 5, 4, 6, 0, 1, 0, 18, 19, 20, 2, 36, 4, 45, 18, 19, 20,
0, 5, 2, 6, 4, 0, 0, 0, 0, 0, 0, 5, 25, 6, 15, 16, 17, 18, 19, 20,
5, 0, 6 2, 0, 4, 0, 0, 0, 0, 0, 5, 0,
6, 17, 18, 19, 20, 2, 0, 4, 55, 0,
0, 0, 0, 5, 0, 6, 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
}; };
static const yysigned_char yycheck[] = static const yysigned_char yycheck[] =
{ {
8, 3, 50, 5, 6, 0, 1, 42, 56, 17, 8, 3, 39, 5, 6, 42, 0, 1, 52, 17,
18, 46, 5, 15, 22, 0, 9, 10, 11, 15, 18, 0, 1, 15, 22, 42, 60, 20, 21, 0,
22, 15, 17, 71, 17, 33, 19, 3, 4, 5, 22, 48, 59, 17, 15, 33, 18, 15, 17, 21,
6, 7, 8, 9, 36, 11, 12, 18, 14, 13, 12, 13, 76, 70, 36, 13, 12, 45, 15, 47,
21, 17, 12, 19, 12, 13, 22, 49, 20, 21, 14, 63, 65, 70, 5, 6, 7, 8, 56, 51,
52, 0, 1, 14, 62, 3, 4, 5, 6, 7, 56, 12, 54, 47, 54, -1, -1, 65, 47, 3,
8, 9, 15, 11, 5, 6, 7, 8, 17, 17, 4, 5, 6, 7, 8, 9, -1, 11, 12, -1,
60, 19, 20, 5, 6, 7, 8, 52, 62, 42, 14, -1, -1, 17, -1, 19, -1, -1, 22, 3,
12, 22, 14, 3, 4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9, -1, 11, 5, 6,
22, 11, 55, 5, 6, 7, 8, 17, 18, 19, 7, 8, -1, 17, -1, 19, 20, 5, 6, 7,
3, 4, 5, 6, 7, 8, 9, -1, 11, 5, 8, -1, -1, -1, 12, 22, 14, 3, 4, 5,
6, 7, 8, 9, 17, 11, 19, -1, 5, -1, 6, 7, 8, 9, 22, 11, 5, 6, 7, 8,
-1, 17, 9, 19, 11, -1, -1, -1, -1, -1, -1, 17, 18, 19, 3, 4, 5, 6, 7, 8,
17, -1, 19 9, -1, 11, -1, -1, -1, -1, -1, 17, -1,
19, 5, 6, 7, 8, 9, -1, 11, 12, -1,
-1, -1, -1, 17, -1, 19, 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
}; };
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@ -462,10 +473,10 @@ static const unsigned char yystos[] =
32, 35, 37, 42, 31, 3, 4, 5, 6, 7, 32, 35, 37, 42, 31, 3, 4, 5, 6, 7,
8, 25, 27, 30, 31, 18, 25, 36, 20, 25, 8, 25, 27, 30, 31, 18, 25, 36, 20, 25,
41, 43, 0, 5, 12, 14, 22, 30, 33, 34, 41, 43, 0, 5, 12, 14, 22, 30, 33, 34,
38, 39, 40, 25, 30, 30, 25, 30, 18, 21, 38, 39, 40, 25, 30, 5, 30, 5, 25, 30,
15, 20, 21, 25, 26, 25, 15, 12, 13, 28, 18, 21, 15, 20, 21, 12, 29, 25, 26, 25,
29, 28, 29, 28, 25, 26, 41, 29, 26, 33, 15, 13, 28, 29, 28, 29, 28, 25, 26, 41,
39, 15, 26 40, 29, 26, 33, 39, 28, 15, 26
}; };
#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
@ -1202,7 +1213,15 @@ yyreduce:
break; break;
case 36: case 36:
#line 226 "gram.y" #line 224 "gram.y"
{
syck_add_transfer( yyvsp[-3].name, yyvsp[-1].nodeData, ((SyckParser *)parser)->taguri_expansion );
yyval.nodeData = yyvsp[-1].nodeData;
}
break;
case 37:
#line 231 "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 ),
@ -1210,8 +1229,8 @@ yyreduce:
} }
break; break;
case 38: case 39:
#line 242 "gram.y" #line 247 "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 ),
@ -1219,23 +1238,23 @@ yyreduce:
} }
break; break;
case 40: case 41:
#line 251 "gram.y" #line 256 "gram.y"
{ {
syck_map_update( yyvsp[-2].nodeData, yyvsp[0].nodeData ); syck_map_update( yyvsp[-2].nodeData, yyvsp[0].nodeData );
yyval.nodeData = yyvsp[-2].nodeData; yyval.nodeData = yyvsp[-2].nodeData;
} }
break; break;
case 41: case 42:
#line 256 "gram.y" #line 261 "gram.y"
{ {
yyval.nodeData = yyvsp[-1].nodeData; yyval.nodeData = yyvsp[-1].nodeData;
} }
break; break;
case 42: case 43:
#line 265 "gram.y" #line 270 "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 ),
@ -1243,22 +1262,22 @@ yyreduce:
} }
break; break;
case 43: case 44:
#line 273 "gram.y" #line 278 "gram.y"
{ {
yyval.nodeData = yyvsp[-1].nodeData; yyval.nodeData = yyvsp[-1].nodeData;
} }
break; break;
case 44: case 45:
#line 277 "gram.y" #line 282 "gram.y"
{ {
yyval.nodeData = syck_alloc_map(); yyval.nodeData = syck_alloc_map();
} }
break; break;
case 46: case 47:
#line 284 "gram.y" #line 289 "gram.y"
{ {
syck_map_update( yyvsp[-2].nodeData, yyvsp[0].nodeData ); syck_map_update( yyvsp[-2].nodeData, yyvsp[0].nodeData );
yyval.nodeData = yyvsp[-2].nodeData; yyval.nodeData = yyvsp[-2].nodeData;
@ -1269,7 +1288,7 @@ yyreduce:
} }
/* Line 1016 of /usr/local/share/bison/yacc.c. */ /* Line 1016 of /usr/local/share/bison/yacc.c. */
#line 1273 "y.tab.c" #line 1292 "y.tab.c"
yyvsp -= yylen; yyvsp -= yylen;
yyssp -= yylen; yyssp -= yylen;
@ -1488,7 +1507,7 @@ yyreturn:
} }
#line 290 "gram.y" #line 295 "gram.y"

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

@ -1,11 +1,11 @@
// /*
// handler.h * handler.h
// *
// $Author$ * $Author$
// $Date$ * $Date$
// *
// Copyright (C) 2003 why the lucky stiff * Copyright (C) 2003 why the lucky stiff
// */
#include "syck.h" #include "syck.h"

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

@ -1,13 +1,13 @@
/* Generated by re2c 0.5 on Sat May 10 19:43:22 2003 */ /* Generated by re2c 0.5 on Sun May 11 19:35:35 2003 */
#line 1 "implicit.re" #line 1 "implicit.re"
// /*
// implicit.re * implicit.re
// *
// $Author$ * $Author$
// $Date$ * $Date$
// *
// Copyright (C) 2003 why the lucky stiff * Copyright (C) 2003 why the lucky stiff
// */
#include "syck.h" #include "syck.h"

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

@ -1,17 +1,17 @@
// /*
// node.c * node.c
// *
// $Author$ * $Author$
// $Date$ * $Date$
// *
// Copyright (C) 2003 why the lucky stiff * Copyright (C) 2003 why the lucky stiff
// */
#include "syck.h" #include "syck.h"
// /*
// Node allocation functions * Node allocation functions
// */
SyckNode * SyckNode *
syck_alloc_node( enum syck_kind_tag type ) syck_alloc_node( enum syck_kind_tag type )
{ {
@ -19,7 +19,7 @@ syck_alloc_node( enum syck_kind_tag type )
s = S_ALLOC( SyckNode ); s = S_ALLOC( SyckNode );
s->kind = type; s->kind = type;
s->id = NULL; s->id = 0;
s->type_id = NULL; s->type_id = NULL;
s->anchor = NULL; s->anchor = NULL;

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

@ -1,11 +1,11 @@
// /*
// rubyext.c * rubyext.c
// *
// $Author$ * $Author$
// $Date$ * $Date$
// *
// Copyright (C) 2003 why the lucky stiff * Copyright (C) 2003 why the lucky stiff
// */
#include "ruby.h" #include "ruby.h"
#include "syck.h" #include "syck.h"
@ -19,9 +19,9 @@ static VALUE sym_model, sym_generic;
static VALUE sym_scalar, sym_seq, sym_map; static VALUE sym_scalar, sym_seq, sym_map;
VALUE cParser, cLoader, cNode, oDefaultLoader; VALUE cParser, cLoader, cNode, oDefaultLoader;
// /*
// my private collection of numerical oddities. * my private collection of numerical oddities.
// */
static double S_zero() { return 0.0; } static double S_zero() { return 0.0; }
static double S_one() { return 1.0; } static double S_one() { return 1.0; }
static double S_inf() { return S_one() / S_zero(); } static double S_inf() { return S_one() / S_zero(); }
@ -29,9 +29,9 @@ static double S_nan() { return S_zero() / S_zero(); }
static VALUE syck_node_transform( VALUE ); static VALUE syck_node_transform( VALUE );
// /*
// read from io. * read from io.
// */
long long
rb_syck_io_str_read( char *buf, SyckIoStr *str, long max_size, long skip ) rb_syck_io_str_read( char *buf, SyckIoStr *str, long max_size, long skip )
{ {
@ -60,9 +60,9 @@ rb_syck_io_str_read( char *buf, SyckIoStr *str, long max_size, long skip )
return len; return len;
} }
// /*
// determine: are we reading from a string or io? * determine: are we reading from a string or io?
// */
void void
syck_parser_assign_io(parser, port) syck_parser_assign_io(parser, port)
SyckParser *parser; SyckParser *parser;
@ -85,9 +85,9 @@ syck_parser_assign_io(parser, port)
} }
} }
// /*
// Get value in hash by key, forcing an empty hash if nil. * Get value in hash by key, forcing an empty hash if nil.
// */
VALUE VALUE
syck_get_hash_aref(hsh, key) syck_get_hash_aref(hsh, key)
VALUE hsh, key; VALUE hsh, key;
@ -101,9 +101,9 @@ syck_get_hash_aref(hsh, key)
return val; return val;
} }
// /*
// creating timestamps * creating timestamps
// */
SYMID SYMID
rb_syck_mktime(str) rb_syck_mktime(str)
char *str; char *str;
@ -145,10 +145,10 @@ rb_syck_mktime(str)
return time; return time;
} }
// /*
// {generic mode} node handler * {generic mode} node handler
// - Loads data into Node classes * - Loads data into Node classes
// */
SYMID SYMID
rb_syck_parse_handler(p, n) rb_syck_parse_handler(p, n)
SyckParser *p; SyckParser *p;
@ -204,10 +204,10 @@ rb_syck_parse_handler(p, n)
return obj; return obj;
} }
// /*
// {native mode} node handler * {native mode} node handler
// - Converts data into native Ruby types * - Converts data into native Ruby types
// */
SYMID SYMID
rb_syck_load_handler(p, n) rb_syck_load_handler(p, n)
SyckParser *p; SyckParser *p;
@ -327,9 +327,9 @@ rb_syck_load_handler(p, n)
return obj; return obj;
} }
// /*
// friendly errors. * friendly errors.
// */
void void
rb_syck_err_handler(p, msg) rb_syck_err_handler(p, msg)
SyckParser *p; SyckParser *p;
@ -348,9 +348,9 @@ rb_syck_err_handler(p, msg)
p->lineptr); p->lineptr);
} }
// /*
// 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, model )
SyckParser *parser; SyckParser *parser;
@ -372,9 +372,9 @@ syck_set_model( parser, model )
} }
} }
// /*
// wrap syck_parse(). * wrap syck_parse().
// */
static VALUE static VALUE
rb_run_syck_parse(parser) rb_run_syck_parse(parser)
SyckParser *parser; SyckParser *parser;
@ -382,9 +382,9 @@ rb_run_syck_parse(parser)
return syck_parse(parser); return syck_parse(parser);
} }
// /*
// free parser. * free parser.
// */
static VALUE static VALUE
rb_syck_ensure(parser) rb_syck_ensure(parser)
SyckParser *parser; SyckParser *parser;
@ -393,9 +393,9 @@ rb_syck_ensure(parser)
return 0; return 0;
} }
// /*
// YAML::Syck::Parser.new * YAML::Syck::Parser.new
// */
VALUE VALUE
syck_parser_new(argc, argv, class) syck_parser_new(argc, argv, class)
int argc; int argc;
@ -417,9 +417,9 @@ syck_parser_new(argc, argv, class)
return pobj; return pobj;
} }
// /*
// YAML::Syck::Parser.initialize( options ) * YAML::Syck::Parser.initialize( options )
// */
static VALUE static VALUE
syck_parser_initialize( self, options ) syck_parser_initialize( self, options )
VALUE self, options; VALUE self, options;
@ -428,9 +428,9 @@ syck_parser_initialize( self, options )
return self; return self;
} }
// /*
// YAML::Syck::Parser.load( IO or String ) * YAML::Syck::Parser.load( IO or String )
// */
VALUE VALUE
syck_parser_load(argc, argv, self) syck_parser_load(argc, argv, self)
int argc; int argc;
@ -454,7 +454,7 @@ syck_parser_load(argc, argv, self)
} }
v = syck_parse( parser ); v = syck_parse( parser );
if ( v == NULL ) if ( v == 0 )
{ {
return Qnil; return Qnil;
} }
@ -464,9 +464,9 @@ syck_parser_load(argc, argv, self)
return v; return v;
} }
// /*
// YAML::Syck::Parser.load_documents( IO or String ) { |doc| } * YAML::Syck::Parser.load_documents( IO or String ) { |doc| }
// */
VALUE VALUE
syck_parser_load_documents(argc, argv, self) syck_parser_load_documents(argc, argv, self)
int argc; int argc;
@ -497,9 +497,9 @@ syck_parser_load_documents(argc, argv, self)
return Qnil; return Qnil;
} }
// /*
// YAML::Syck::Loader.initialize * YAML::Syck::Loader.initialize
// */
static VALUE static VALUE
syck_loader_initialize( self ) syck_loader_initialize( self )
VALUE self; VALUE self;
@ -516,9 +516,9 @@ syck_loader_initialize( self )
return self; return self;
} }
// /*
// Add type family, used by add_*_type methods. * Add type family, used by add_*_type methods.
// */
VALUE VALUE
syck_loader_add_type_family( self, domain, type_re, proc ) syck_loader_add_type_family( self, domain, type_re, proc )
VALUE self, domain, type_re, proc; VALUE self, domain, type_re, proc;
@ -528,11 +528,12 @@ syck_loader_add_type_family( self, domain, type_re, proc )
families = rb_iv_get(self, "@families"); families = rb_iv_get(self, "@families");
domain_types = syck_get_hash_aref(families, domain); domain_types = syck_get_hash_aref(families, domain);
rb_hash_aset( domain_types, type_re, proc ); rb_hash_aset( domain_types, type_re, proc );
return Qnil;
} }
// /*
// YAML::Syck::Loader.add_domain_type * YAML::Syck::Loader.add_domain_type
// */
VALUE VALUE
syck_loader_add_domain_type( argc, argv, self ) syck_loader_add_domain_type( argc, argv, self )
int argc; int argc;
@ -543,12 +544,13 @@ syck_loader_add_domain_type( argc, argv, self )
rb_scan_args(argc, argv, "2&", &domain, &type_re, &proc); rb_scan_args(argc, argv, "2&", &domain, &type_re, &proc);
syck_loader_add_type_family( self, domain, type_re, proc ); syck_loader_add_type_family( self, domain, type_re, proc );
return Qnil;
} }
// /*
// YAML::Syck::Loader.add_builtin_type * YAML::Syck::Loader.add_builtin_type
// */
VALUE VALUE
syck_loader_add_builtin_type( argc, argv, self ) syck_loader_add_builtin_type( argc, argv, self )
int argc; int argc;
@ -559,11 +561,12 @@ syck_loader_add_builtin_type( argc, argv, self )
rb_scan_args(argc, argv, "1&", &type_re, &proc); rb_scan_args(argc, argv, "1&", &type_re, &proc);
syck_loader_add_type_family( self, rb_str_new2( YAML_DOMAIN ), type_re, proc ); syck_loader_add_type_family( self, rb_str_new2( YAML_DOMAIN ), type_re, proc );
return Qnil;
} }
// /*
// YAML::Syck::Loader.add_ruby_type * YAML::Syck::Loader.add_ruby_type
// */
VALUE VALUE
syck_loader_add_ruby_type( argc, argv, self ) syck_loader_add_ruby_type( argc, argv, self )
int argc; int argc;
@ -574,11 +577,12 @@ syck_loader_add_ruby_type( argc, argv, self )
rb_scan_args(argc, argv, "1&", &type_re, &proc); rb_scan_args(argc, argv, "1&", &type_re, &proc);
syck_loader_add_type_family( self, rb_str_new2( RUBY_DOMAIN ), type_re, proc ); syck_loader_add_type_family( self, rb_str_new2( RUBY_DOMAIN ), type_re, proc );
return Qnil;
} }
// /*
// YAML::Syck::Loader.add_private_type * YAML::Syck::Loader.add_private_type
// */
VALUE VALUE
syck_loader_add_private_type( argc, argv, self ) syck_loader_add_private_type( argc, argv, self )
int argc; int argc;
@ -591,11 +595,30 @@ syck_loader_add_private_type( argc, argv, self )
priv_types = rb_iv_get(self, "@private_types"); priv_types = rb_iv_get(self, "@private_types");
rb_hash_aset( priv_types, type_re, proc ); rb_hash_aset( priv_types, type_re, proc );
return Qnil;
} }
// /*
// iterator to search a type hash for a match. * YAML::Syck::Loader#detect
// */
VALUE
syck_loader_detect_implicit( self, val )
VALUE self, val;
{
char *type_id;
if ( TYPE(val) == T_STRING )
{
type_id = syck_match_implicit( RSTRING(val)->ptr, RSTRING(val)->len );
return rb_str_new2( type_id );
}
return rb_str_new2( "" );
}
/*
* iterator to search a type hash for a match.
*/
static VALUE static VALUE
transfer_find_i(entry, col) transfer_find_i(entry, col)
VALUE entry, col; VALUE entry, col;
@ -611,9 +634,9 @@ transfer_find_i(entry, col)
return Qnil; return Qnil;
} }
// /*
// YAML::Syck::Loader#transfer * YAML::Syck::Loader#transfer
// */
VALUE VALUE
syck_loader_transfer( self, type, val ) syck_loader_transfer( self, type, val )
VALUE self, type, val; VALUE self, type, val;
@ -689,15 +712,16 @@ syck_loader_transfer( self, type, val )
return val; return val;
} }
// /*
// YAML::Syck::Node.initialize * YAML::Syck::Node.initialize
// */
VALUE VALUE
syck_node_initialize( self, type_id, val ) syck_node_initialize( self, type_id, val )
VALUE self, type_id, val; VALUE self, type_id, val;
{ {
rb_iv_set( self, "@type_id", type_id ); rb_iv_set( self, "@type_id", type_id );
rb_iv_set( self, "@value", val ); rb_iv_set( self, "@value", val );
return self;
} }
VALUE VALUE
@ -708,6 +732,7 @@ syck_node_thash( entry, t )
key = rb_ary_entry( entry, 0 ); key = rb_ary_entry( entry, 0 );
val = syck_node_transform( rb_ary_entry( rb_ary_entry( entry, 1 ), 1 ) ); val = syck_node_transform( rb_ary_entry( rb_ary_entry( entry, 1 ), 1 ) );
rb_hash_aset( t, key, val ); rb_hash_aset( t, key, val );
return Qnil;
} }
VALUE VALUE
@ -716,11 +741,12 @@ syck_node_ahash( entry, t )
{ {
VALUE val = syck_node_transform( entry ); VALUE val = syck_node_transform( entry );
rb_ary_push( t, val ); rb_ary_push( t, val );
return Qnil;
} }
// /*
// YAML::Syck::Node.transform * YAML::Syck::Node.transform
// */
VALUE VALUE
syck_node_transform( self ) syck_node_transform( self )
VALUE self; VALUE self;
@ -745,9 +771,9 @@ syck_node_transform( self )
return rb_funcall( oDefaultLoader, rb_intern( "transfer" ), 2, type_id, t ); return rb_funcall( oDefaultLoader, rb_intern( "transfer" ), 2, type_id, t );
} }
// /*
// Initialize Syck extension * Initialize Syck extension
// */
void void
Init_syck() Init_syck()
{ {
@ -778,6 +804,7 @@ Init_syck()
rb_define_method( cLoader, "add_builtin_type", syck_loader_add_builtin_type, -1 ); rb_define_method( cLoader, "add_builtin_type", syck_loader_add_builtin_type, -1 );
rb_define_method( cLoader, "add_ruby_type", syck_loader_add_ruby_type, -1 ); rb_define_method( cLoader, "add_ruby_type", syck_loader_add_ruby_type, -1 );
rb_define_method( cLoader, "add_private_type", syck_loader_add_private_type, -1 ); rb_define_method( cLoader, "add_private_type", syck_loader_add_private_type, -1 );
rb_define_method( cLoader, "detect_implicit", syck_loader_detect_implicit, 1 );
rb_define_method( cLoader, "transfer", syck_loader_transfer, 2 ); rb_define_method( cLoader, "transfer", syck_loader_transfer, 2 );
oDefaultLoader = rb_funcall( cLoader, rb_intern( "new" ), 0 ); oDefaultLoader = rb_funcall( cLoader, rb_intern( "new" ), 0 );

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

@ -1,11 +1,11 @@
// /*
// syck.c * syck.c
// *
// $Author$ * $Author$
// $Date$ * $Date$
// *
// Copyright (C) 2003 why the lucky stiff * Copyright (C) 2003 why the lucky stiff
// */
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@ -15,9 +15,9 @@
#define SYCK_YAML_MINOR 0 #define SYCK_YAML_MINOR 0
#define SYCK_BUFFERSIZE 262144 #define SYCK_BUFFERSIZE 262144
// /*
// Custom assert * Custom assert
// */
void void
syck_assert( char *file_name, unsigned line_num ) syck_assert( char *file_name, unsigned line_num )
{ {
@ -36,9 +36,9 @@ syck_strndup( char *buf, long len )
S_MEMCPY( new, buf, char, len ); S_MEMCPY( new, buf, char, len );
} }
// /*
// Default IO functions * Default IO functions
// */
long long
syck_io_file_read( char *buf, SyckIoFile *file, long max_size, long skip ) syck_io_file_read( char *buf, SyckIoFile *file, long max_size, long skip )
{ {
@ -109,7 +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].domain = ""; // YAML_DOMAIN + "/"; p->levels[0].domain = syck_strndup( "", 1 ); // YAML_DOMAIN + "/";
p->levels[0].status = syck_lvl_header; p->levels[0].status = syck_lvl_header;
} }
@ -135,9 +135,9 @@ syck_parser_reset_cursor( SyckParser *p )
p->force_token = 0; p->force_token = 0;
} }
// /*
// Allocate the parser * Allocate the parser
// */
SyckParser * SyckParser *
syck_new_parser() syck_new_parser()
{ {
@ -303,10 +303,7 @@ syck_parser_pop_level( SyckParser *p )
if ( p->lvl_idx <= 1 ) return; if ( p->lvl_idx <= 1 ) return;
p->lvl_idx -= 1; p->lvl_idx -= 1;
if ( p->levels[p->lvl_idx - 1].domain != p->levels[p->lvl_idx].domain ) free( p->levels[p->lvl_idx].domain );
{
free( p->levels[p->lvl_idx].domain );
}
} }
void void
@ -321,7 +318,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].domain = 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;
} }
@ -443,7 +440,7 @@ syck_parse( SyckParser *p )
ASSERT( p != NULL ); ASSERT( p != NULL );
p->root = NULL; p->root = 0;
syck_parser_reset_levels( p ); syck_parser_reset_levels( p );
yyparse( p ); yyparse( p );
return p->root; return p->root;

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

@ -1,11 +1,11 @@
// /*
// syck.h * syck.h
// *
// $Author$ * $Author$
// $Date$ * $Date$
// *
// Copyright (C) 2003 why the lucky stiff * Copyright (C) 2003 why the lucky stiff
// */
#ifndef SYCK_H #ifndef SYCK_H
#define SYCK_H #define SYCK_H
@ -24,9 +24,9 @@
extern "C" { extern "C" {
#endif #endif
// /*
// Memory Allocation * Memory Allocation
// */
#if defined(HAVE_ALLOCA_H) && !defined(__GNUC__) #if defined(HAVE_ALLOCA_H) && !defined(__GNUC__)
#include <alloca.h> #include <alloca.h>
#endif #endif
@ -65,9 +65,9 @@ extern "C" {
#define NL_CHOMP 130 #define NL_CHOMP 130
#define NL_KEEP 140 #define NL_KEEP 140
// /*
// Node definitions * Node definitions
// */
#define SYMID unsigned long #define SYMID unsigned long
typedef struct _syck_parser SyckParser; typedef struct _syck_parser SyckParser;
@ -118,9 +118,9 @@ struct _syck_node {
} data; } data;
}; };
// /*
// Parser definitions * Parser definitions
// */
typedef SYMID (*SyckNodeHandler)(SyckParser *, SyckNode *); typedef SYMID (*SyckNodeHandler)(SyckParser *, SyckNode *);
typedef void (*SyckErrorHandler)(SyckParser *, char *); typedef void (*SyckErrorHandler)(SyckParser *, char *);
typedef long (*SyckIoFileRead)(char *, SyckIoFile *, long, long); typedef long (*SyckIoFileRead)(char *, SyckIoFile *, long, long);
@ -135,6 +135,7 @@ enum syck_level_status {
syck_lvl_header, syck_lvl_header,
syck_lvl_doc, syck_lvl_doc,
syck_lvl_seq, syck_lvl_seq,
syck_lvl_map,
syck_lvl_block, syck_lvl_block,
syck_lvl_str, syck_lvl_str,
syck_lvl_inline, syck_lvl_inline,
@ -190,9 +191,9 @@ struct _syck_parser {
void *bonus; void *bonus;
}; };
// /*
// Handler prototypes * Handler prototypes
// */
SYMID syck_hdlr_add_node( SyckParser *, SyckNode * ); SYMID syck_hdlr_add_node( SyckParser *, SyckNode * );
SyckNode *syck_hdlr_add_anchor( SyckParser *, char *, SyckNode * ); SyckNode *syck_hdlr_add_anchor( SyckParser *, char *, SyckNode * );
SyckNode *syck_hdlr_add_alias( SyckParser *, char * ); SyckNode *syck_hdlr_add_alias( SyckParser *, char * );
@ -207,9 +208,9 @@ void syck_fold_format( struct SyckStr *, int, int, int );
void try_tag_implicit( SyckNode *, int ); void try_tag_implicit( SyckNode *, int );
char *syck_match_implicit( char *, size_t ); char *syck_match_implicit( char *, size_t );
// /*
// API prototypes * API prototypes
// */
char *syck_strndup( char *, long ); char *syck_strndup( char *, long );
long syck_io_file_read( char *, SyckIoFile *, long, long ); long syck_io_file_read( char *, SyckIoFile *, long, long );
long syck_io_str_read( char *, SyckIoStr *, long, long ); long syck_io_str_read( char *, SyckIoStr *, long, long );
@ -231,9 +232,9 @@ void syck_parser_init( SyckParser *, int );
SYMID syck_parse( SyckParser * ); SYMID syck_parse( SyckParser * );
void syck_default_error_handler( SyckParser *, char * ); void syck_default_error_handler( SyckParser *, char * );
// /*
// Allocation prototypes * Allocation prototypes
// */
SyckNode *syck_alloc_map(); SyckNode *syck_alloc_map();
SyckNode *syck_alloc_seq(); SyckNode *syck_alloc_seq();
SyckNode *syck_alloc_str(); SyckNode *syck_alloc_str();

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

@ -1,25 +1,24 @@
/* Generated by re2c 0.5 on Sat May 10 19:31:12 2003 */ /* Generated by re2c 0.5 on Tue May 13 00:35:24 2003 */
#line 1 "token.re" #line 1 "token.re"
// /*
// token.re * token.re
// *
// $Author$ * $Author$
// $Date$ * $Date$
// *
// Copyright (C) 2003 why the lucky stiff * Copyright (C) 2003 why the lucky stiff
// */
#include "syck.h" #include "syck.h"
#include "gram.h" #include "gram.h"
// /*
// Allocate quoted strings in chunks * Allocate quoted strings in chunks
// */
#define QUOTELEN 1024 #define QUOTELEN 1024
// /*
// They do my bidding... * They do my bidding...
// */
#define YYCTYPE char #define YYCTYPE char
#define YYCURSOR parser->cursor #define YYCURSOR parser->cursor
#define YYMARKER parser->marker #define YYMARKER parser->marker
@ -30,33 +29,33 @@
#define YYLINE parser->linect #define YYLINE parser->linect
#define YYFILL(n) syck_parser_read(parser) #define YYFILL(n) syck_parser_read(parser)
// /*
// Repositions the cursor at `n' offset from the token start. * Repositions the cursor at `n' offset from the token start.
// Only works in `Header' and `Document' sections. * Only works in `Header' and `Document' sections.
// */
#define YYPOS(n) YYCURSOR = YYTOKEN + n #define YYPOS(n) YYCURSOR = YYTOKEN + n
// /*
// Track line numbers * Track line numbers
// */
#define NEWLINE(ptr) YYLINE++; YYLINEPTR = ptr + 1 #define NEWLINE(ptr) YYLINE++; YYLINEPTR = ptr + 1
// /*
// I like seeing the level operations as macros... * I like seeing the level operations as macros...
// */
#define ADD_LEVEL(len, status) syck_parser_add_level( parser, len, status ) #define ADD_LEVEL(len, status) syck_parser_add_level( parser, len, status )
#define POP_LEVEL() syck_parser_pop_level( parser ) #define POP_LEVEL() syck_parser_pop_level( parser )
#define CURRENT_LEVEL() syck_parser_current_level( parser ) #define CURRENT_LEVEL() syck_parser_current_level( parser )
// /*
// Force a token next time around yylex() * Force a token next time around yylex()
// */
#define FORCE_NEXT_TOKEN(tok) parser->force_token = tok; #define FORCE_NEXT_TOKEN(tok) parser->force_token = tok;
// /*
// Nice little macro to ensure we're IOPENed to the current level. * Nice little macro to ensure we're IOPENed to the current level.
// * Only use this macro in the "Document" section * * * Only use this macro in the "Document" section *
// */
#define ENSURE_IOPEN(last_lvl, to_len, reset) \ #define ENSURE_IOPEN(last_lvl, to_len, reset) \
if ( last_lvl->spaces < to_len ) \ if ( last_lvl->spaces < to_len ) \
{ \ { \
@ -72,10 +71,10 @@
} \ } \
} }
// /*
// Nice little macro to ensure closure of levels. * Nice little macro to ensure closure of levels.
// * Only use this macro in the "Document" section * * * Only use this macro in the "Document" section *
// */
#define ENSURE_IEND(last_lvl, to_len) \ #define ENSURE_IEND(last_lvl, to_len) \
if ( last_lvl->spaces > to_len ) \ if ( last_lvl->spaces > to_len ) \
{ \ { \
@ -84,10 +83,10 @@
return IEND; \ return IEND; \
} }
// /*
// Concatenates quoted string items and manages allocation * Concatenates quoted string items and manages allocation
// to the quoted string * to the quoted string
// */
#define QUOTECAT(s, c, i, l) \ #define QUOTECAT(s, c, i, l) \
{ \ { \
if ( i + 1 >= c ) \ if ( i + 1 >= c ) \
@ -99,10 +98,10 @@
s[i] = '\0'; \ s[i] = '\0'; \
} }
// /*
// Tags a plain scalar with a transfer method * Tags a plain scalar with a transfer method
// * Use only in "Plain" section * * * Use only in "Plain" section *
// */
#define RETURN_IMPLICIT(fold) \ #define RETURN_IMPLICIT(fold) \
{ \ { \
SyckLevel *i_lvl = CURRENT_LEVEL(); \ SyckLevel *i_lvl = CURRENT_LEVEL(); \
@ -118,9 +117,9 @@
return PLAIN; \ return PLAIN; \
} }
// /*
// Handles newlines, calculates indent * Handles newlines, calculates indent
// */
#define GOBBLE_UP_INDENT( ict, start ) \ #define GOBBLE_UP_INDENT( ict, start ) \
char *indent = start; \ char *indent = start; \
NEWLINE(indent); \ NEWLINE(indent); \
@ -142,9 +141,9 @@
ict = YYCURSOR - YYLINEPTR; \ ict = YYCURSOR - YYLINEPTR; \
} }
// /*
// If an indent exists at the current level, back up. * If an indent exists at the current level, back up.
// */
#define GET_TRUE_INDENT(indt_len) \ #define GET_TRUE_INDENT(indt_len) \
{ \ { \
SyckLevel *lvl_deep = CURRENT_LEVEL(); \ SyckLevel *lvl_deep = CURRENT_LEVEL(); \
@ -159,21 +158,21 @@
} \ } \
} }
// /*
// Argjh! I hate globals! Here for yyerror() only! * Argjh! I hate globals! Here for yyerror() only!
// */
SyckParser *syck_parser_ptr = NULL; SyckParser *syck_parser_ptr = NULL;
// /*
// Accessory funcs later in this file. * Accessory funcs later in this file.
// */
void eat_comments( SyckParser * ); void eat_comments( SyckParser * );
// /*
// My own re-entrant yylex() using re2c. * My own re-entrant yylex() using re2c.
// You really get used to the limited regexp. * You really get used to the limited regexp.
// It's really nice to not rely on backtracking and such. * It's really nice to not rely on backtracking and such.
// */
int int
yylex( YYSTYPE *yylval, SyckParser *parser ) yylex( YYSTYPE *yylval, SyckParser *parser )
{ {
@ -190,7 +189,7 @@ yylex( YYSTYPE *yylval, SyckParser *parser )
return t; return t;
} }
#line 206 #line 205
if ( YYLINEPTR != YYCURSOR ) if ( YYLINEPTR != YYCURSOR )
@ -256,19 +255,19 @@ yy2: yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR); yych = *(YYMARKER = ++YYCURSOR);
if(yych == '-') goto yy15; if(yych == '-') goto yy15;
yy3: yy3:
#line 247 #line 246
{ YYPOS(0); { YYPOS(0);
goto Document; goto Document;
} }
yy4: yych = *++YYCURSOR; yy4: yych = *++YYCURSOR;
yy5: yy5:
#line 233 #line 232
{ eat_comments( parser ); { eat_comments( parser );
goto Header; goto Header;
} }
yy6: yych = *++YYCURSOR; yy6: yych = *++YYCURSOR;
yy7: yy7:
#line 237 #line 236
{ SyckLevel *lvl = CURRENT_LEVEL(); { SyckLevel *lvl = CURRENT_LEVEL();
ENSURE_IEND(lvl, -1); ENSURE_IEND(lvl, -1);
return 0; return 0;
@ -276,7 +275,7 @@ yy7:
yy8: yych = *++YYCURSOR; yy8: yych = *++YYCURSOR;
goto yy12; goto yy12;
yy9: yy9:
#line 242 #line 241
{ int indt_len; { int indt_len;
GOBBLE_UP_INDENT( indt_len, YYTOKEN ); GOBBLE_UP_INDENT( indt_len, YYTOKEN );
goto Header; goto Header;
@ -308,7 +307,7 @@ yy18: ++YYCURSOR;
yych = *YYCURSOR; yych = *YYCURSOR;
yy19: if(yybm[0+yych] & 128) goto yy18; yy19: if(yybm[0+yych] & 128) goto yy18;
yy20: yy20:
#line 219 #line 218
{ SyckLevel *lvl = CURRENT_LEVEL(); { SyckLevel *lvl = CURRENT_LEVEL();
if ( lvl->status == syck_lvl_header ) if ( lvl->status == syck_lvl_header )
{ {
@ -328,7 +327,7 @@ yy21: ++YYCURSOR;
yy22: if(yych == '\n') goto yy21; yy22: if(yych == '\n') goto yy21;
goto yy20; goto yy20;
} }
#line 251 #line 250
Document: Document:
@ -434,7 +433,7 @@ yy23:
yy25: yych = *++YYCURSOR; yy25: yych = *++YYCURSOR;
goto yy77; goto yy77;
yy26: yy26:
#line 265 #line 264
{ // Isolate spaces { // Isolate spaces
int indt_len; int indt_len;
GOBBLE_UP_INDENT( indt_len, YYTOKEN ); GOBBLE_UP_INDENT( indt_len, YYTOKEN );
@ -451,7 +450,7 @@ yy26:
} }
yy27: yych = *++YYCURSOR; yy27: yych = *++YYCURSOR;
yy28: yy28:
#line 280 #line 279
{ ENSURE_IOPEN(lvl, 0, 1); { ENSURE_IOPEN(lvl, 0, 1);
lvl = CURRENT_LEVEL(); lvl = CURRENT_LEVEL();
ADD_LEVEL(lvl->spaces + 1, syck_lvl_inline); ADD_LEVEL(lvl->spaces + 1, syck_lvl_inline);
@ -459,7 +458,7 @@ yy28:
} }
yy29: yych = *++YYCURSOR; yy29: yych = *++YYCURSOR;
yy30: yy30:
#line 286 #line 285
{ POP_LEVEL(); { POP_LEVEL();
return YYTOKEN[0]; return YYTOKEN[0];
} }
@ -467,7 +466,7 @@ yy31: yych = *++YYCURSOR;
if(yych == '\n') goto yy74; if(yych == '\n') goto yy74;
if(yych == ' ') goto yy71; if(yych == ' ') goto yy71;
yy32: yy32:
#line 335 #line 334
{ ENSURE_IOPEN(lvl, 0, 1); { ENSURE_IOPEN(lvl, 0, 1);
goto Plain; goto Plain;
} }
@ -485,15 +484,15 @@ yy35: yych = *++YYCURSOR;
goto yy32; goto yy32;
yy36: yych = *++YYCURSOR; yy36: yych = *++YYCURSOR;
yy37: yy37:
#line 312 #line 311
{ goto TransferMethod; } { goto TransferMethod; }
yy38: yych = *++YYCURSOR; yy38: yych = *++YYCURSOR;
yy39: yy39:
#line 314 #line 313
{ goto SingleQuote; } { goto SingleQuote; }
yy40: yych = *++YYCURSOR; yy40: yych = *++YYCURSOR;
yy41: yy41:
#line 316 #line 315
{ goto DoubleQuote; } { goto DoubleQuote; }
yy42: yyaccept = 0; yy42: yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR); yych = *(YYMARKER = ++YYCURSOR);
@ -514,18 +513,18 @@ yy42: yyaccept = 0;
} }
yy43: yych = *++YYCURSOR; yy43: yych = *++YYCURSOR;
yy44: yy44:
#line 325 #line 324
{ eat_comments( parser ); { eat_comments( parser );
goto Document; goto Document;
} }
yy45: yych = *++YYCURSOR; yy45: yych = *++YYCURSOR;
goto yy51; goto yy51;
yy46: yy46:
#line 329 #line 328
{ goto Document; } { goto Document; }
yy47: yych = *++YYCURSOR; yy47: yych = *++YYCURSOR;
yy48: yy48:
#line 331 #line 330
{ ENSURE_IEND(lvl, -1); { ENSURE_IEND(lvl, -1);
return 0; return 0;
} }
@ -560,7 +559,7 @@ yy55: ++YYCURSOR;
yych = *YYCURSOR; yych = *YYCURSOR;
yy56: if(yych == ' ') goto yy55; yy56: if(yych == ' ') goto yy55;
yy57: yy57:
#line 318 #line 317
{ if ( *( YYCURSOR - 1 ) == '\n' ) { if ( *( YYCURSOR - 1 ) == '\n' )
{ {
YYCURSOR--; YYCURSOR--;
@ -577,7 +576,7 @@ yy60: ++YYCURSOR;
yych = *YYCURSOR; yych = *YYCURSOR;
yy61: if(yybm[0+yych] & 64) goto yy60; yy61: if(yybm[0+yych] & 64) goto yy60;
yy62: yy62:
#line 308 #line 307
{ yylval->name = syck_strndup( YYTOKEN + 1, YYCURSOR - YYTOKEN - 1 ); { yylval->name = syck_strndup( YYTOKEN + 1, YYCURSOR - YYTOKEN - 1 );
return ALIAS; return ALIAS;
} }
@ -588,7 +587,7 @@ yy64: if(yych <= '-') goto yy65;
if(yych == '`') goto yy65; if(yych == '`') goto yy65;
if(yych <= 'z') goto yy63; if(yych <= 'z') goto yy63;
yy65: yy65:
#line 304 #line 303
{ yylval->name = syck_strndup( YYTOKEN + 1, YYCURSOR - YYTOKEN - 1 ); { yylval->name = syck_strndup( YYTOKEN + 1, YYCURSOR - YYTOKEN - 1 );
return ANCHOR; return ANCHOR;
} }
@ -597,7 +596,7 @@ yy66: ++YYCURSOR;
yych = *YYCURSOR; yych = *YYCURSOR;
yy67: if(yych == ' ') goto yy66; yy67: if(yych == ' ') goto yy66;
yy68: yy68:
#line 294 #line 293
{ ENSURE_IOPEN(lvl, YYTOKEN - YYLINEPTR, 1); { ENSURE_IOPEN(lvl, YYTOKEN - YYLINEPTR, 1);
FORCE_NEXT_TOKEN(IOPEN); FORCE_NEXT_TOKEN(IOPEN);
if ( *( YYCURSOR - 1 ) == '\n' ) if ( *( YYCURSOR - 1 ) == '\n' )
@ -617,7 +616,7 @@ yy71: ++YYCURSOR;
yych = *YYCURSOR; yych = *YYCURSOR;
yy72: if(yych == ' ') goto yy71; yy72: if(yych == ' ') goto yy71;
yy73: yy73:
#line 290 #line 289
{ YYPOS(1); { YYPOS(1);
return YYTOKEN[0]; return YYTOKEN[0];
} }
@ -637,7 +636,7 @@ yy78: ++YYCURSOR;
yy79: if(yybm[0+yych] & 128) goto yy78; yy79: if(yybm[0+yych] & 128) goto yy78;
goto yy26; goto yy26;
} }
#line 339 #line 338
} }
@ -705,14 +704,14 @@ yy83: yyaccept = 0;
if(yych == '`') goto yy84; if(yych == '`') goto yy84;
if(yych <= 'z') goto yy90; if(yych <= 'z') goto yy90;
yy84: yy84:
#line 352 #line 351
{ YYCURSOR = YYTOKTMP; { YYCURSOR = YYTOKTMP;
return DOCSEP; return DOCSEP;
} }
yy85: yych = *++YYCURSOR; yy85: yych = *++YYCURSOR;
goto yy89; goto yy89;
yy86: yy86:
#line 350 #line 349
{ goto Directive; } { goto Directive; }
yy87: yych = *++YYCURSOR; yy87: yych = *++YYCURSOR;
goto yy84; goto yy84;
@ -734,10 +733,10 @@ yy93: ++YYCURSOR;
yych = *YYCURSOR; yych = *YYCURSOR;
yy94: if(yybm[0+yych] & 128) goto yy93; yy94: if(yybm[0+yych] & 128) goto yy93;
yy95: yy95:
#line 348 #line 347
{ goto Directive; } { goto Directive; }
} }
#line 355 #line 354
} }
@ -820,7 +819,7 @@ yy96:
yy98: yych = *++YYCURSOR; yy98: yych = *++YYCURSOR;
goto yy122; goto yy122;
yy99: yy99:
#line 375 #line 374
{ int indt_len; { int indt_len;
SyckLevel *lvl; SyckLevel *lvl;
char *tok = YYTOKTMP; char *tok = YYTOKTMP;
@ -839,11 +838,11 @@ yy100: yych = *++YYCURSOR;
if(yych == '\n') goto yy119; if(yych == '\n') goto yy119;
if(yych == ' ') goto yy116; if(yych == ' ') goto yy116;
yy101: yy101:
#line 404 #line 403
{ goto Plain2; } { goto Plain2; }
yy102: yych = *++YYCURSOR; yy102: yych = *++YYCURSOR;
yy103: yy103:
#line 392 #line 391
{ if ( plvl->status != syck_lvl_inline ) goto Plain2; { if ( plvl->status != syck_lvl_inline ) goto Plain2;
RETURN_IMPLICIT(multiLine); RETURN_IMPLICIT(multiLine);
} }
@ -853,18 +852,18 @@ yy104: yych = *++YYCURSOR;
goto yy101; goto yy101;
yy105: yych = *++YYCURSOR; yy105: yych = *++YYCURSOR;
yy106: yy106:
#line 396 #line 395
{ RETURN_IMPLICIT(multiLine); } { RETURN_IMPLICIT(multiLine); }
yy107: yych = *++YYCURSOR; yy107: yych = *++YYCURSOR;
if(yych == '#') goto yy110; if(yych == '#') goto yy110;
yy108: yy108:
#line 402 #line 401
{ goto Plain3; } { goto Plain3; }
yy109: yych = *++YYCURSOR; yy109: yych = *++YYCURSOR;
goto yy101; goto yy101;
yy110: yych = *++YYCURSOR; yy110: yych = *++YYCURSOR;
yy111: yy111:
#line 398 #line 397
{ eat_comments( parser ); { eat_comments( parser );
RETURN_IMPLICIT(multiLine); RETURN_IMPLICIT(multiLine);
} }
@ -883,7 +882,7 @@ yy116: ++YYCURSOR;
yych = *YYCURSOR; yych = *YYCURSOR;
yy117: if(yych == ' ') goto yy116; yy117: if(yych == ' ') goto yy116;
yy118: yy118:
#line 390 #line 389
{ RETURN_IMPLICIT(multiLine); } { RETURN_IMPLICIT(multiLine); }
yy119: ++YYCURSOR; yy119: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1); if(YYLIMIT == YYCURSOR) YYFILL(1);
@ -901,7 +900,7 @@ yy123: ++YYCURSOR;
yy124: if(yybm[0+yych] & 128) goto yy123; yy124: if(yybm[0+yych] & 128) goto yy123;
goto yy99; goto yy99;
} }
#line 406 #line 405
} }
@ -966,7 +965,7 @@ yy125:
yy127: yych = *++YYCURSOR; yy127: yych = *++YYCURSOR;
goto yy137; goto yy137;
yy128: yy128:
#line 420 #line 419
{ int indt_len; { int indt_len;
int nl_count = 0; int nl_count = 0;
SyckLevel *lvl; SyckLevel *lvl;
@ -1005,7 +1004,7 @@ yy128:
yy129: yych = *++YYCURSOR; yy129: yych = *++YYCURSOR;
if(yych == '\'') goto yy134; if(yych == '\'') goto yy134;
yy130: yy130:
#line 460 #line 459
{ SyckLevel *lvl; { SyckLevel *lvl;
SyckNode *n = syck_alloc_str(); SyckNode *n = syck_alloc_str();
lvl = CURRENT_LEVEL(); lvl = CURRENT_LEVEL();
@ -1023,13 +1022,13 @@ yy131: yych = *++YYCURSOR;
goto yy130; goto yy130;
yy132: yych = *++YYCURSOR; yy132: yych = *++YYCURSOR;
yy133: yy133:
#line 474 #line 473
{ QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1)); { QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1));
goto SingleQuote2; goto SingleQuote2;
} }
yy134: yych = *++YYCURSOR; yy134: yych = *++YYCURSOR;
yy135: yy135:
#line 456 #line 455
{ QUOTECAT(qstr, qcapa, qidx, '\''); { QUOTECAT(qstr, qcapa, qidx, '\'');
goto SingleQuote2; goto SingleQuote2;
} }
@ -1044,7 +1043,7 @@ yy138: ++YYCURSOR;
yy139: if(yybm[0+yych] & 128) goto yy138; yy139: if(yybm[0+yych] & 128) goto yy138;
goto yy128; goto yy128;
} }
#line 478 #line 477
} }
@ -1114,7 +1113,7 @@ yy140:
yy142: yych = *++YYCURSOR; yy142: yych = *++YYCURSOR;
goto yy158; goto yy158;
yy143: yy143:
#line 496 #line 495
{ int indt_len; { int indt_len;
int nl_count = 0; int nl_count = 0;
SyckLevel *lvl; SyckLevel *lvl;
@ -1186,13 +1185,13 @@ yy144: yyaccept = 0;
} }
} }
yy145: yy145:
#line 571 #line 570
{ QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1)); { QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1));
goto DoubleQuote2; goto DoubleQuote2;
} }
yy146: yych = *++YYCURSOR; yy146: yych = *++YYCURSOR;
yy147: yy147:
#line 557 #line 556
{ SyckLevel *lvl; { SyckLevel *lvl;
SyckNode *n = syck_alloc_str(); SyckNode *n = syck_alloc_str();
lvl = CURRENT_LEVEL(); lvl = CURRENT_LEVEL();
@ -1221,14 +1220,14 @@ yy152: YYCURSOR = YYMARKER;
} }
yy153: yych = *++YYCURSOR; yy153: yych = *++YYCURSOR;
yy154: yy154:
#line 552 #line 551
{ keep_nl = 0; { keep_nl = 0;
YYCURSOR--; YYCURSOR--;
goto DoubleQuote2; goto DoubleQuote2;
} }
yy155: yych = *++YYCURSOR; yy155: yych = *++YYCURSOR;
yy156: yy156:
#line 536 #line 535
{ char ch = *( YYCURSOR - 1 ); { char ch = *( YYCURSOR - 1 );
switch ( ch ) switch ( ch )
{ {
@ -1255,7 +1254,7 @@ yy159: ++YYCURSOR;
yy160: if(yybm[0+yych] & 128) goto yy159; yy160: if(yybm[0+yych] & 128) goto yy159;
goto yy143; goto yy143;
} }
#line 575 #line 574
} }
@ -1316,7 +1315,7 @@ yy161:
yy163:yy164: yych = *++YYCURSOR; yy163:yy164: yych = *++YYCURSOR;
goto yy172; goto yy172;
yy165: yy165:
#line 584 #line 583
{ SyckLevel *lvl; { SyckLevel *lvl;
YYCURSOR = YYTOKTMP; YYCURSOR = YYTOKTMP;
if ( YYCURSOR == YYTOKEN + 1 ) if ( YYCURSOR == YYTOKEN + 1 )
@ -1331,14 +1330,14 @@ yy165:
// //
if ( *(YYTOKEN + 1) == '^' ) if ( *(YYTOKEN + 1) == '^' )
{ {
yylval->name = S_ALLOC_N( char, YYCURSOR - YYTOKEN + strlen( lvl->domain ) ); yylval->name = S_ALLOC_N( char, ( YYCURSOR - YYTOKEN ) + strlen( lvl->domain ) );
yylval->name[0] = '\0'; yylval->name[0] = '\0';
strcat( yylval->name, lvl->domain ); strcat( yylval->name, lvl->domain );
strncat( yylval->name, YYTOKEN + 2, YYCURSOR - YYTOKEN - 2 ); strncat( yylval->name, YYTOKEN + 2, ( YYCURSOR - YYTOKEN ) - 2 );
} }
else else
{ {
char *carat = YYTOKEN + 1; char *carat = YYTOKEN;
while ( (++carat) < YYCURSOR ) while ( (++carat) < YYCURSOR )
{ {
if ( *carat == '^' ) if ( *carat == '^' )
@ -1347,30 +1346,26 @@ yy165:
if ( carat < YYCURSOR ) if ( carat < YYCURSOR )
{ {
lvl->domain = syck_strndup( YYTOKEN + 1, carat - YYTOKEN - 1 ); free( lvl->domain );
yylval->name = S_ALLOC_N( char, YYCURSOR - carat + strlen( lvl->domain ) ); lvl->domain = syck_strndup( YYTOKEN + 1, ( carat - YYTOKEN ) - 1 );
yylval->name = S_ALLOC_N( char, ( YYCURSOR - carat ) + strlen( lvl->domain ) );
yylval->name[0] = '\0'; yylval->name[0] = '\0';
strcat( yylval->name, lvl->domain ); strcat( yylval->name, lvl->domain );
strncat( yylval->name, carat + 1, YYCURSOR - carat - 1 ); strncat( yylval->name, carat + 1, ( YYCURSOR - carat ) - 1 );
} }
else else
{ {
yylval->name = syck_strndup( YYTOKEN + 1, YYCURSOR - YYTOKEN - 1 ); yylval->name = syck_strndup( YYTOKEN + 1, ( YYCURSOR - YYTOKEN ) - 1 );
} }
} }
if ( *YYCURSOR == '\n' )
{
FORCE_NEXT_TOKEN(IOPEN);
ADD_LEVEL(lvl->spaces, syck_lvl_doc);
}
return TRANSFER; return TRANSFER;
} }
yy166: yych = *++YYCURSOR; yy166: yych = *++YYCURSOR;
goto yy170; goto yy170;
yy167: yych = *++YYCURSOR; yy167: yych = *++YYCURSOR;
yy168: yy168:
#line 634 #line 629
{ goto TransferMethod; } { goto TransferMethod; }
yy169: ++YYCURSOR; yy169: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1); if(YYLIMIT == YYCURSOR) YYFILL(1);
@ -1383,7 +1378,7 @@ yy171: ++YYCURSOR;
yy172: if(yybm[0+yych] & 128) goto yy171; yy172: if(yybm[0+yych] & 128) goto yy171;
goto yy165; goto yy165;
} }
#line 636 #line 631
} }
@ -1476,7 +1471,7 @@ yy173:
yy175: yych = *++YYCURSOR; yy175: yych = *++YYCURSOR;
goto yy184; goto yy184;
yy176: yy176:
#line 678 #line 673
{ int indt_len; { int indt_len;
GOBBLE_UP_INDENT( indt_len, YYTOKTMP ); GOBBLE_UP_INDENT( indt_len, YYTOKTMP );
lvl = CURRENT_LEVEL(); lvl = CURRENT_LEVEL();
@ -1509,7 +1504,7 @@ yy176:
} }
yy177: yych = *++YYCURSOR; yy177: yych = *++YYCURSOR;
yy178: yy178:
#line 710 #line 705
{ lvl = CURRENT_LEVEL(); { lvl = CURRENT_LEVEL();
YYCURSOR--; YYCURSOR--;
yylval->nodeData = syck_new_str2( YYTOKEN, YYCURSOR - YYTOKEN ); yylval->nodeData = syck_new_str2( YYTOKEN, YYCURSOR - YYTOKEN );
@ -1519,7 +1514,7 @@ yy178:
} }
yy179: yych = *++YYCURSOR; yy179: yych = *++YYCURSOR;
yy180: yy180:
#line 718 #line 713
{ lvl = CURRENT_LEVEL(); { lvl = CURRENT_LEVEL();
if ( lvl->status != syck_lvl_block ) if ( lvl->status != syck_lvl_block )
{ {
@ -1530,7 +1525,7 @@ yy180:
} }
yy181: yych = *++YYCURSOR; yy181: yych = *++YYCURSOR;
yy182: yy182:
#line 727 #line 722
{ goto ScalarBlock2; } { goto ScalarBlock2; }
yy183: ++YYCURSOR; yy183: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1); if(YYLIMIT == YYCURSOR) YYFILL(1);
@ -1543,7 +1538,7 @@ yy185: ++YYCURSOR;
yy186: if(yybm[0+yych] & 128) goto yy185; yy186: if(yybm[0+yych] & 128) goto yy185;
goto yy176; goto yy176;
} }
#line 729 #line 724
} }
@ -1605,7 +1600,7 @@ yy187:
goto yy192; goto yy192;
yy189: yych = *++YYCURSOR; yy189: yych = *++YYCURSOR;
yy190: yy190:
#line 745 #line 740
{ SyckLevel *lvl = CURRENT_LEVEL(); { SyckLevel *lvl = CURRENT_LEVEL();
YYCURSOR = tok; YYCURSOR = tok;
return; return;
@ -1614,7 +1609,7 @@ yy191: yych = *++YYCURSOR;
goto yy195; goto yy195;
yy192: yych = *++YYCURSOR; yy192: yych = *++YYCURSOR;
yy193: yy193:
#line 750 #line 745
{ goto Comment; { goto Comment;
} }
yy194: ++YYCURSOR; yy194: ++YYCURSOR;
@ -1623,7 +1618,7 @@ yy194: ++YYCURSOR;
yy195: if(yybm[0+yych] & 128) goto yy194; yy195: if(yybm[0+yych] & 128) goto yy194;
goto yy190; goto yy190;
} }
#line 753 #line 748
} }
@ -1642,7 +1637,7 @@ yyerror( char *msg )
if ( syck_parser_ptr->error_handler == NULL ) if ( syck_parser_ptr->error_handler == NULL )
syck_parser_ptr->error_handler = syck_default_error_handler; syck_parser_ptr->error_handler = syck_default_error_handler;
syck_parser_ptr->root = NULL; syck_parser_ptr->root = 0;
(syck_parser_ptr->error_handler)(syck_parser_ptr, msg); (syck_parser_ptr->error_handler)(syck_parser_ptr, msg);
} }

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

@ -104,18 +104,20 @@ module YAML
@@loader.add_private_type( type_re, &transfer_proc ) @@loader.add_private_type( type_re, &transfer_proc )
end end
#
# Detect typing of a string
#
def YAML.detect_implicit( val )
@@loader.detect_implicit( val )
end
# #
# Method to extract colon-seperated type and class, returning # Method to extract colon-seperated type and class, returning
# the type and the constant of the class # the type and the constant of the class
# #
def YAML.read_type_class( type, obj_class ) def YAML.read_type_class( type, obj_class )
type =~ /^([^:]+):(.+)/i scheme, domain, type, tclass = type.split( ':', 4 )
if $2 tclass.split( "::" ).each { |c| obj_class = obj_class.const_get( c ) } if tclass
type = $1
$2.split( "::" ).each { |c|
obj_class = obj_class.const_get( c )
}
end
return [ type, obj_class ] return [ type, obj_class ]
end end

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

@ -160,25 +160,18 @@ class Struct
end end
YAML.add_ruby_type( 'struct' ) { |type, val| YAML.add_ruby_type( 'struct' ) { |type, val|
type =~ /^struct:(\w+)/
if Hash === val if Hash === val
type = $1 struct_type = nil
struct_type = nil
struct_def = []
struct_name = ""
if $1.to_s.length > 1
struct_name = $1[0..$1.length]
struct_def << struct_name
end
# #
# Use existing Struct if it exists # Use existing Struct if it exists
# #
begin begin
struct_type = Struct.const_get( struct_name ) struct_name, struct_type = YAML.read_type_class( type, Struct )
rescue NameError rescue NameError
end end
if not struct_type if not struct_type
struct_def = [ type.split( ':', 4 ).last ]
struct_type = Struct.new( *struct_def.concat( val.keys.collect { |k| k.intern } ) ) struct_type = Struct.new( *struct_def.concat( val.keys.collect { |k| k.intern } ) )
end end