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

* 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
parent cea30a129a
commit bd810795c5
10 changed files with 435 additions and 401 deletions

View file

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

View file

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

View file

@ -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"
//
// implicit.re
//
// $Author$
// $Date$
//
// Copyright (C) 2003 why the lucky stiff
//
/*
* implicit.re
*
* $Author$
* $Date$
*
* Copyright (C) 2003 why the lucky stiff
*/
#include "syck.h"

View file

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

View file

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

View file

@ -1,11 +1,11 @@
//
// syck.c
//
// $Author$
// $Date$
//
// Copyright (C) 2003 why the lucky stiff
//
/*
* syck.c
*
* $Author$
* $Date$
*
* Copyright (C) 2003 why the lucky stiff
*/
#include <stdio.h>
#include <string.h>
@ -15,9 +15,9 @@
#define SYCK_YAML_MINOR 0
#define SYCK_BUFFERSIZE 262144
//
// Custom assert
//
/*
* Custom assert
*/
void
syck_assert( char *file_name, unsigned line_num )
{
@ -36,9 +36,9 @@ syck_strndup( char *buf, long len )
S_MEMCPY( new, buf, char, len );
}
//
// Default IO functions
//
/*
* Default IO functions
*/
long
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->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;
}
@ -135,9 +135,9 @@ syck_parser_reset_cursor( SyckParser *p )
p->force_token = 0;
}
//
// Allocate the parser
//
/*
* Allocate the parser
*/
SyckParser *
syck_new_parser()
{
@ -303,11 +303,8 @@ syck_parser_pop_level( SyckParser *p )
if ( p->lvl_idx <= 1 ) return;
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 );
}
}
void
syck_parser_add_level( SyckParser *p, int len, enum syck_level_status status )
@ -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 );
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->lvl_idx += 1;
}
@ -443,7 +440,7 @@ syck_parse( SyckParser *p )
ASSERT( p != NULL );
p->root = NULL;
p->root = 0;
syck_parser_reset_levels( p );
yyparse( p );
return p->root;

View file

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

View file

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

View file

@ -104,18 +104,20 @@ module YAML
@@loader.add_private_type( type_re, &transfer_proc )
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
# the type and the constant of the class
#
def YAML.read_type_class( type, obj_class )
type =~ /^([^:]+):(.+)/i
if $2
type = $1
$2.split( "::" ).each { |c|
obj_class = obj_class.const_get( c )
}
end
scheme, domain, type, tclass = type.split( ':', 4 )
tclass.split( "::" ).each { |c| obj_class = obj_class.const_get( c ) } if tclass
return [ type, obj_class ]
end

View file

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