From 63428e345c6255a37a59c258dc0b7d1269ccf5f5 Mon Sep 17 00:00:00 2001 From: Charles Oliver Nutter Date: Fri, 13 Jan 2023 09:50:17 -0600 Subject: Fix up spec version handling --- ext/java/org/jruby/ext/psych/PsychEmitter.java | 11 ++++++++--- ext/java/org/jruby/ext/psych/PsychParser.java | 9 +++++---- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/ext/java/org/jruby/ext/psych/PsychEmitter.java b/ext/java/org/jruby/ext/psych/PsychEmitter.java index 2ad1251..9180dcc 100644 --- a/ext/java/org/jruby/ext/psych/PsychEmitter.java +++ b/ext/java/org/jruby/ext/psych/PsychEmitter.java @@ -140,13 +140,18 @@ public class PsychEmitter extends RubyObject { TypeConverter.checkType(context, _version, arrayClass); RubyArray versionAry = _version.convertToArray(); + Optional specVersion; if (versionAry.size() == 2) { int versionInt0 = versionAry.eltInternal(0).convertToInteger().getIntValue(); int versionInt1 = versionAry.eltInternal(1).convertToInteger().getIntValue(); - if (versionInt0 != 1 || versionInt1 != 2) { -// throw runtime.newArgumentError("invalid YAML version: " + versionAry); + if (versionInt0 != 1) { + throw runtime.newArgumentError("invalid YAML version: " + versionAry); } + + specVersion = Optional.of(new SpecVersion(versionInt0, versionInt1)); + } else { + specVersion = Optional.empty(); } Map tagsMap = new HashMap<>(); @@ -171,7 +176,7 @@ public class PsychEmitter extends RubyObject { } } - DocumentStartEvent event = new DocumentStartEvent(!implicitBool, Optional.empty(), tagsMap, NULL_MARK, NULL_MARK); + DocumentStartEvent event = new DocumentStartEvent(!implicitBool, specVersion, tagsMap, NULL_MARK, NULL_MARK); emit(context, event); return this; } diff --git a/ext/java/org/jruby/ext/psych/PsychParser.java b/ext/java/org/jruby/ext/psych/PsychParser.java index ccd843b..fd5e19c 100644 --- a/ext/java/org/jruby/ext/psych/PsychParser.java +++ b/ext/java/org/jruby/ext/psych/PsychParser.java @@ -305,10 +305,11 @@ public class PsychParser extends RubyObject { private void handleDocumentStart(ThreadContext context, DocumentStartEvent dse, IRubyObject handler) { Ruby runtime = context.runtime; - SpecVersion _version = dse.getSpecVersion().orElse(new SpecVersion(1, 2)); - IRubyObject version = _version == null ? - RubyArray.newArray(runtime) : - RubyArray.newArray(runtime, runtime.newFixnum(_version.getMajor()), runtime.newFixnum(_version.getMinor())); + + Optional specVersion = dse.getSpecVersion(); + IRubyObject version = specVersion.isPresent() ? + RubyArray.newArray(runtime, runtime.newFixnum(specVersion.get().getMajor()), runtime.newFixnum(specVersion.get().getMinor())) : + RubyArray.newEmptyArray(runtime); Map tagsMap = dse.getTags(); RubyArray tags = RubyArray.newArray(runtime); -- cgit v1.2.1