summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorAaron Patterson <tenderlove@ruby-lang.org>2022-09-19 08:44:16 -0700
committerGitHub <noreply@github.com>2022-09-19 08:44:16 -0700
commitaf50867197df587ef4007fedf1736c4faa7cbf64 (patch)
treeabcdf5c7466fb973720436c87a37438510337378 /ext
parenta565e1fcec3dad4de7e753b9c3e113c7ed1a22a4 (diff)
parentbca7d2c54942205e9364f8b0c0a1948fd1442ec8 (diff)
downloadpsych-af50867197df587ef4007fedf1736c4faa7cbf64.tar.gz
Merge pull request #580 from ruby/more-ruby
Convert some of Parser#parse to Ruby
Diffstat (limited to 'ext')
-rw-r--r--ext/psych/psych_parser.c22
1 files changed, 2 insertions, 20 deletions
diff --git a/ext/psych/psych_parser.c b/ext/psych/psych_parser.c
index f91475b..9c5179c 100644
--- a/ext/psych/psych_parser.c
+++ b/ext/psych/psych_parser.c
@@ -245,18 +245,8 @@ static VALUE protected_event_location(VALUE pointer)
return rb_funcall3(args[0], id_event_location, 4, args + 1);
}
-/*
- * call-seq:
- * parser.parse(yaml)
- *
- * Parse the YAML document contained in +yaml+. Events will be called on
- * the handler set on the parser instance.
- *
- * See Psych::Parser and Psych::Parser#handler
- */
-static VALUE parse(int argc, VALUE *argv, VALUE self)
+static VALUE parse(VALUE self, VALUE handler, VALUE yaml, VALUE path)
{
- VALUE yaml, path;
yaml_parser_t * parser;
yaml_event_t event;
int done = 0;
@@ -264,14 +254,6 @@ static VALUE parse(int argc, VALUE *argv, VALUE self)
int parser_encoding = YAML_ANY_ENCODING;
int encoding = rb_utf8_encindex();
rb_encoding * internal_enc = rb_default_internal_encoding();
- 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>");
- }
TypedData_Get_Struct(self, yaml_parser_t, &psych_parser_type, parser);
@@ -562,7 +544,7 @@ void Init_psych_parser(void)
rb_require("psych/syntax_error");
- rb_define_method(cPsychParser, "parse", parse, -1);
+ rb_define_private_method(cPsychParser, "_native_parse", parse, 3);
rb_define_method(cPsychParser, "mark", mark, 0);
id_read = rb_intern("read");