From c202dd0e0172602a101015260a021fb59700f086 Mon Sep 17 00:00:00 2001 From: diwakar Date: Fri, 29 Oct 2021 11:27:34 -0700 Subject: [PATCH 1/2] Allowing tags to be propogated for other events as well --- src/parser.rs | 20 ++++++++++---------- src/yaml.rs | 4 ++-- tests/spec_test.rs.inc | 2 ++ tests/specexamples.rs.inc | 2 +- tests/specs/handler_spec_test.cpp | 2 ++ 5 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/parser.rs b/src/parser.rs index 4a63146..cb379d6 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -44,10 +44,10 @@ pub enum Event { /// Value, style, anchor_id, tag Scalar(String, TScalarStyle, usize, Option), /// Anchor ID - SequenceStart(usize), + SequenceStart(usize, Option), SequenceEnd, /// Anchor ID - MappingStart(usize), + MappingStart(usize, Option), MappingEnd, } @@ -233,11 +233,11 @@ impl> Parser { recv.on_event(first_ev, mark); Ok(()) } - Event::SequenceStart(_) => { + Event::SequenceStart(..) => { recv.on_event(first_ev, mark); self.load_sequence(recv) } - Event::MappingStart(_) => { + Event::MappingStart(..) => { recv.on_event(first_ev, mark); self.load_mapping(recv) } @@ -497,7 +497,7 @@ impl> Parser { match *self.peek_token()? { Token(mark, TokenType::BlockEntry) if indentless_sequence => { self.state = State::IndentlessSequenceEntry; - Ok((Event::SequenceStart(anchor_id), mark)) + Ok((Event::SequenceStart(anchor_id, tag), mark)) } Token(_, TokenType::Scalar(..)) => { self.pop_state(); @@ -509,19 +509,19 @@ impl> Parser { } Token(mark, TokenType::FlowSequenceStart) => { self.state = State::FlowSequenceFirstEntry; - Ok((Event::SequenceStart(anchor_id), mark)) + Ok((Event::SequenceStart(anchor_id, tag), mark)) } Token(mark, TokenType::FlowMappingStart) => { self.state = State::FlowMappingFirstKey; - Ok((Event::MappingStart(anchor_id), mark)) + Ok((Event::MappingStart(anchor_id, tag), mark)) } Token(mark, TokenType::BlockSequenceStart) if block => { self.state = State::BlockSequenceFirstEntry; - Ok((Event::SequenceStart(anchor_id), mark)) + Ok((Event::SequenceStart(anchor_id, tag), mark)) } Token(mark, TokenType::BlockMappingStart) if block => { self.state = State::BlockMappingFirstKey; - Ok((Event::MappingStart(anchor_id), mark)) + Ok((Event::MappingStart(anchor_id, tag), mark)) } // ex 7.2, an empty scalar can follow a secondary tag Token(mark, _) if tag.is_some() || anchor_id > 0 => { @@ -718,7 +718,7 @@ impl> Parser { Token(mark, TokenType::Key) => { self.state = State::FlowSequenceEntryMappingKey; self.skip(); - Ok((Event::MappingStart(0), mark)) + Ok((Event::MappingStart(0, None), mark)) } _ => { self.push_state(State::FlowSequenceEntry); diff --git a/src/yaml.rs b/src/yaml.rs index 4bb70da..d23f7a4 100644 --- a/src/yaml.rs +++ b/src/yaml.rs @@ -90,14 +90,14 @@ impl MarkedEventReceiver for YamlLoader { _ => unreachable!(), } } - Event::SequenceStart(aid) => { + Event::SequenceStart(aid, _) => { self.doc_stack.push((Yaml::Array(Vec::new()), aid)); } Event::SequenceEnd => { let node = self.doc_stack.pop().unwrap(); self.insert_new_node(node); } - Event::MappingStart(aid) => { + Event::MappingStart(aid, _) => { self.doc_stack.push((Yaml::Hash(Hash::new()), aid)); self.key_stack.push(Yaml::BadValue); } diff --git a/tests/spec_test.rs.inc b/tests/spec_test.rs.inc index bb50b3b..ff6e864 100644 --- a/tests/spec_test.rs.inc +++ b/tests/spec_test.rs.inc @@ -335,6 +335,8 @@ fn test_ex2_23_various_explicit_tags() { assert_next!(v, TestEvent::OnScalar); assert_next!(v, TestEvent::OnScalar); assert_next!(v, TestEvent::OnScalar); + assert_next!(v, TestEvent::OnScalar); + assert_next!(v, TestEvent::OnScalar); assert_next!(v, TestEvent::OnMapEnd); assert_next!(v, TestEvent::OnDocumentEnd); } diff --git a/tests/specexamples.rs.inc b/tests/specexamples.rs.inc index a5398c3..7f5a12b 100644 --- a/tests/specexamples.rs.inc +++ b/tests/specexamples.rs.inc @@ -55,7 +55,7 @@ const EX2_18 : &'static str = // TODO: 2.19 - 2.22 schema tags const EX2_23 : &'static str = - "---\nnot-date: !!str 2002-04-28\n\npicture: !!binary |\n R0lGODlhDAAMAIQAAP//9/X\n 17unp5WZmZgAAAOfn515eXv\n Pz7Y6OjuDg4J+fn5OTk6enp\n 56enmleECcgggoBADs=\n\napplication specific tag: !something |\n The semantics of the tag\n above may be different for\n different documents."; + "---\nnot-date: !!str 2002-04-28\n\npicture: !!binary |\n R0lGODlhDAAMAIQAAP//9/X\n 17unp5WZmZgAAAOfn515eXv\n Pz7Y6OjuDg4J+fn5OTk6enp\n 56enmleECcgggoBADs=\n\napplication specific tag: !something |\n The semantics of the tag\n above may be different for\n different documents.\n\nscalar tag with value: !Ref reference\n"; const EX2_24 : &'static str = "%TAG ! tag:clarkevans.com,2002:\n--- !shape\n # Use the ! handle for presenting\n # tag:clarkevans.com,2002:circle\n- !circle\n center: &ORIGIN {x: 73, y: 129}\n radius: 7\n- !line\n start: *ORIGIN\n finish: { x: 89, y: 102 }\n- !label\n start: *ORIGIN\n color: 0xFFEEBB\n text: Pretty vector drawing."; diff --git a/tests/specs/handler_spec_test.cpp b/tests/specs/handler_spec_test.cpp index aa4f7ca..da2c095 100644 --- a/tests/specs/handler_spec_test.cpp +++ b/tests/specs/handler_spec_test.cpp @@ -339,6 +339,8 @@ TEST_F(HandlerSpecTest, Ex2_23_VariousExplicitTags) { EXPECT_CALL(handler, OnScalar(_, "tag:yaml.org,2002:binary", 0, "R0lGODlhDAAMAIQAAP//9/X\n17unp5WZmZgAAAOfn515eXv\nPz7Y6OjuDg4J+fn5OTk6enp\n56enmleECcgggoBADs=\n")); EXPECT_CALL(handler, OnScalar(_, "?", 0, "application specific tag")); EXPECT_CALL(handler, OnScalar(_, "!something", 0, "The semantics of the tag\nabove may be different for\ndifferent documents.")); + EXPECT_CALL(handler, OnScalar(_, "?", 0, "scalar tag with value")); + EXPECT_CALL(handler, OnScalar(_, "!Ref", 0, "reference")); EXPECT_CALL(handler, OnMapEnd()); EXPECT_CALL(handler, OnDocumentEnd()); Parse(ex2_23); From 1c6497b66caafc34c028d8ef68119d498590c8f1 Mon Sep 17 00:00:00 2001 From: diwakar Date: Wed, 3 Nov 2021 14:52:14 -0700 Subject: [PATCH 2/2] Modifying LLVM_VERSION to 11.0.0 to fix build --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 5b3ee4c..27d0089 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -5,7 +5,7 @@ branches: - master environment: - LLVM_VERSION: 9.0.1 + LLVM_VERSION: 11.0.0 PLATFORM: x64 matrix: - channel: stable