mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/psych/parser.c (parse): parse method can take an option file
name for use in exception messages. * test/psych/test_parser.rb: corresponding tests. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33900 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
302b6f6e02
commit
0df90074c7
3 changed files with 24 additions and 8 deletions
|
@ -1,3 +1,9 @@
|
|||
Wed Nov 30 09:09:37 2011 Aaron Patterson <aaron@tenderlovemaking.com>
|
||||
|
||||
* ext/psych/parser.c (parse): parse method can take an option file
|
||||
name for use in exception messages.
|
||||
* test/psych/test_parser.rb: corresponding tests.
|
||||
|
||||
Tue Nov 29 09:07:59 2011 Eric Hodel <drbrain@segment7.net>
|
||||
|
||||
* lib/mkmf.rb: Fix indentations of constants at end of module.
|
||||
|
|
|
@ -84,8 +84,9 @@ static VALUE make_exception(yaml_parser_t * parser, VALUE path)
|
|||
*
|
||||
* See Psych::Parser and Psych::Parser#handler
|
||||
*/
|
||||
static VALUE parse(VALUE self, VALUE yaml)
|
||||
static VALUE parse(int argc, VALUE *argv, VALUE self)
|
||||
{
|
||||
VALUE yaml, path;
|
||||
yaml_parser_t * parser;
|
||||
yaml_event_t event;
|
||||
int done = 0;
|
||||
|
@ -96,6 +97,13 @@ static VALUE parse(VALUE self, VALUE yaml)
|
|||
#endif
|
||||
VALUE handler = rb_iv_get(self, "@handler");
|
||||
|
||||
if (rb_scan_args(argc, argv, "11", &yaml, &path) == 1) {
|
||||
if(rb_respond_to(yaml, id_path))
|
||||
path = rb_funcall(yaml, id_path, 0);
|
||||
else
|
||||
path = rb_str_new2("<unknown>");
|
||||
}
|
||||
|
||||
Data_Get_Struct(self, yaml_parser_t, parser);
|
||||
|
||||
if (OBJ_TAINTED(yaml)) tainted = 1;
|
||||
|
@ -114,12 +122,7 @@ static VALUE parse(VALUE self, VALUE yaml)
|
|||
|
||||
while(!done) {
|
||||
if(!yaml_parser_parse(parser, &event)) {
|
||||
VALUE path, exception;
|
||||
|
||||
if(rb_respond_to(yaml, id_path))
|
||||
path = rb_funcall(yaml, id_path, 0);
|
||||
else
|
||||
path = rb_str_new2("<unknown>");
|
||||
VALUE exception;
|
||||
|
||||
exception = make_exception(parser, path);
|
||||
yaml_parser_delete(parser);
|
||||
|
@ -392,7 +395,7 @@ void Init_psych_parser()
|
|||
rb_require("psych/syntax_error");
|
||||
ePsychSyntaxError = rb_define_class_under(mPsych, "SyntaxError", rb_eSyntaxError);
|
||||
|
||||
rb_define_method(cPsychParser, "parse", parse, 1);
|
||||
rb_define_method(cPsychParser, "parse", parse, -1);
|
||||
rb_define_method(cPsychParser, "mark", mark, 0);
|
||||
rb_define_method(cPsychParser, "external_encoding=", set_external_encoding, 1);
|
||||
|
||||
|
|
|
@ -32,6 +32,13 @@ module Psych
|
|||
@handler.parser = @parser
|
||||
end
|
||||
|
||||
def test_filename
|
||||
ex = assert_raises(Psych::SyntaxError) do
|
||||
@parser.parse '--- `', 'omg!'
|
||||
end
|
||||
assert_match 'omg!', ex.message
|
||||
end
|
||||
|
||||
def test_line_numbers
|
||||
assert_equal 0, @parser.mark.line
|
||||
@parser.parse "---\n- hello\n- world"
|
||||
|
|
Loading…
Add table
Reference in a new issue