@@ -263,6 +263,7 @@ ParseEngine<EventHandler>::ParseEngine(EventHandler *evt_handler, ParserOptions
263263 , m_pending_tags()
264264 , m_was_inside_qmrk(false )
265265 , m_doc_empty(false )
266+ , m_prev_colon(npos)
266267 , m_encoding(NOBOM)
267268 , m_newline_offsets()
268269 , m_newline_offsets_size(0 )
@@ -282,6 +283,7 @@ ParseEngine<EventHandler>::ParseEngine(ParseEngine &&that) noexcept
282283 , m_pending_tags(that.m_pending_tags)
283284 , m_was_inside_qmrk(false )
284285 , m_doc_empty(false )
286+ , m_prev_colon(npos)
285287 , m_encoding(NOBOM)
286288 , m_newline_offsets(that.m_newline_offsets)
287289 , m_newline_offsets_size(that.m_newline_offsets_size)
@@ -301,6 +303,7 @@ ParseEngine<EventHandler>::ParseEngine(ParseEngine const& that)
301303 , m_pending_tags(that.m_pending_tags)
302304 , m_was_inside_qmrk(false )
303305 , m_doc_empty(false )
306+ , m_prev_colon(npos)
304307 , m_encoding(NOBOM)
305308 , m_newline_offsets()
306309 , m_newline_offsets_size()
@@ -328,6 +331,7 @@ ParseEngine<EventHandler>& ParseEngine<EventHandler>::operator=(ParseEngine &&th
328331 m_pending_tags = that.m_pending_tags ;
329332 m_was_inside_qmrk = that.m_was_inside_qmrk ;
330333 m_doc_empty = that.m_doc_empty ;
334+ m_prev_colon = that.m_prev_colon ;
331335 m_encoding = that.m_encoding ;
332336 m_newline_offsets = (that.m_newline_offsets );
333337 m_newline_offsets_size = (that.m_newline_offsets_size );
@@ -351,6 +355,7 @@ ParseEngine<EventHandler>& ParseEngine<EventHandler>::operator=(ParseEngine cons
351355 m_pending_tags = that.m_pending_tags ;
352356 m_was_inside_qmrk = that.m_was_inside_qmrk ;
353357 m_doc_empty = that.m_doc_empty ;
358+ m_prev_colon = that.m_prev_colon ;
354359 m_encoding = that.m_encoding ;
355360 if (that.m_newline_offsets_capacity > m_newline_offsets_capacity)
356361 _resize_locations (that.m_newline_offsets_capacity );
@@ -374,6 +379,7 @@ void ParseEngine<EventHandler>::_clr()
374379 m_pending_tags = {};
375380 m_was_inside_qmrk = false ;
376381 m_doc_empty = true ;
382+ m_prev_colon = npos;
377383 m_encoding = NOBOM;
378384 m_newline_offsets = {};
379385 m_newline_offsets_size = {};
@@ -404,6 +410,7 @@ void ParseEngine<EventHandler>::_reset()
404410 m_pending_tags = {};
405411 m_doc_empty = true ;
406412 m_was_inside_qmrk = false ;
413+ m_prev_colon = npos;
407414 m_encoding = NOBOM;
408415 if (m_options.locations ())
409416 {
@@ -4116,6 +4123,18 @@ void ParseEngine<EventHandler>::_handle_flow_skip_whitespace()
41164123// -----------------------------------------------------------------------------
41174124
41184125
4126+ template <class EventHandler >
4127+ void ParseEngine<EventHandler>::_handle_colon()
4128+ {
4129+ size_t curr = m_evt_handler->m_curr ->pos .line ;
4130+ if (m_prev_colon != npos)
4131+ {
4132+ if (curr == m_prev_colon)
4133+ _c4err (" two colons on same line" );
4134+ }
4135+ m_prev_colon = curr;
4136+ }
4137+
41194138template <class EventHandler >
41204139void ParseEngine<EventHandler>::_add_annotation(Annotation *C4_RESTRICT dst, csubstr str, size_t indentation, size_t line)
41214140{
@@ -5705,6 +5724,7 @@ void ParseEngine<EventHandler>::_handle_seq_block()
57055724 _c4dbgp (" seqblck[RVAL]: start mapblck, set scalar as key" );
57065725 addrem_flags (RNXT, RVAL);
57075726 _handle_annotations_before_start_mapblck (startline);
5727+ _handle_colon ();
57085728 m_evt_handler->begin_map_val_block ();
57095729 _handle_annotations_and_indentation_after_start_mapblck (startindent, startline);
57105730 csubstr maybe_filtered = _maybe_filter_key_scalar_squot (sc); // KEY!
@@ -5731,6 +5751,7 @@ void ParseEngine<EventHandler>::_handle_seq_block()
57315751 _c4dbgp (" seqblck[RVAL]: start mapblck, set scalar as key" );
57325752 addrem_flags (RNXT, RVAL);
57335753 _handle_annotations_before_start_mapblck (startline);
5754+ _handle_colon ();
57345755 m_evt_handler->begin_map_val_block ();
57355756 _handle_annotations_and_indentation_after_start_mapblck (startindent, startline);
57365757 csubstr maybe_filtered = _maybe_filter_key_scalar_dquot (sc); // KEY!
@@ -5781,6 +5802,7 @@ void ParseEngine<EventHandler>::_handle_seq_block()
57815802 _c4dbgp (" seqblck[RVAL]: start mapblck, set scalar as key" );
57825803 addrem_flags (RNXT, RVAL);
57835804 _handle_annotations_before_start_mapblck (startline);
5805+ _handle_colon ();
57845806 m_evt_handler->begin_map_val_block ();
57855807 _handle_annotations_and_indentation_after_start_mapblck (startindent, startline);
57865808 csubstr maybe_filtered = _maybe_filter_key_scalar_plain (sc, m_evt_handler->m_curr ->indref ); // KEY!
@@ -5858,6 +5880,7 @@ void ParseEngine<EventHandler>::_handle_seq_block()
58585880 _c4dbgp (" seqblck[RVAL]: start child mapblck with empty key" );
58595881 addrem_flags (RNXT, RVAL);
58605882 _handle_annotations_before_start_mapblck (startline);
5883+ _handle_colon ();
58615884 m_evt_handler->begin_map_val_block ();
58625885 _handle_annotations_and_indentation_after_start_mapblck (startindent, startline);
58635886 m_evt_handler->set_key_scalar_plain_empty ();
@@ -6534,6 +6557,7 @@ void ParseEngine<EventHandler>::_handle_map_block()
65346557 _c4dbgp (" mapblck[RVAL]: start new block map, set scalar as key" );
65356558 _handle_annotations_before_start_mapblck (startline);
65366559 addrem_flags (RNXT, RVAL);
6560+ _handle_colon ();
65376561 m_evt_handler->begin_map_val_block ();
65386562 _handle_annotations_and_indentation_after_start_mapblck (startindent, startline);
65396563 csubstr maybe_filtered = _maybe_filter_key_scalar_squot (sc); // KEY!
@@ -6574,6 +6598,7 @@ void ParseEngine<EventHandler>::_handle_map_block()
65746598 _c4dbgp (" mapblck[RVAL]: start new block map, set scalar as key" );
65756599 _handle_annotations_before_start_mapblck (startline);
65766600 addrem_flags (RNXT, RVAL);
6601+ _handle_colon ();
65776602 m_evt_handler->begin_map_val_block ();
65786603 _handle_annotations_and_indentation_after_start_mapblck (startindent, startline);
65796604 csubstr maybe_filtered = _maybe_filter_key_scalar_dquot (sc); // KEY!
@@ -6635,6 +6660,7 @@ void ParseEngine<EventHandler>::_handle_map_block()
66356660 _c4dbgpf (" mapblck[RVAL]: start new block map, set scalar as key {}" , m_evt_handler->m_curr ->indref );
66366661 addrem_flags (RNXT, RVAL);
66376662 _handle_annotations_before_start_mapblck (startline);
6663+ _handle_colon ();
66386664 m_evt_handler->begin_map_val_block ();
66396665 _handle_annotations_and_indentation_after_start_mapblck (startindent, startline);
66406666 csubstr maybe_filtered = _maybe_filter_key_scalar_plain (sc, m_evt_handler->m_curr ->indref ); // KEY!
@@ -6816,6 +6842,7 @@ void ParseEngine<EventHandler>::_handle_map_block()
68166842 _c4dbgp (" mapblck[RVAL]: start val mapblck" );
68176843 addrem_flags (RNXT, RVAL);
68186844 _handle_annotations_before_start_mapblck (startline);
6845+ _handle_colon ();
68196846 m_evt_handler->begin_map_val_block ();
68206847 _handle_annotations_and_indentation_after_start_mapblck (startindent, startline);
68216848 m_evt_handler->set_key_scalar_plain_empty ();
@@ -7549,6 +7576,7 @@ void ParseEngine<EventHandler>::_handle_unk()
75497576 m_evt_handler->check_trailing_doc_token ();
75507577 _maybe_begin_doc ();
75517578 _handle_annotations_before_start_mapblck (startline);
7579+ _handle_colon ();
75527580 m_evt_handler->begin_map_val_block ();
75537581 _handle_annotations_and_indentation_after_start_mapblck (startindent, startline);
75547582 m_evt_handler->set_key_scalar_plain_empty ();
@@ -7645,6 +7673,7 @@ void ParseEngine<EventHandler>::_handle_unk()
76457673 {
76467674 _c4dbgp (" runk: start new block map, set scalar as key" );
76477675 _handle_annotations_before_start_mapblck (startline);
7676+ _handle_colon ();
76487677 m_evt_handler->begin_map_val_block ();
76497678 _handle_annotations_and_indentation_after_start_mapblck (startindent, startline);
76507679 csubstr maybe_filtered = _maybe_filter_key_scalar_squot (sc);
@@ -7674,6 +7703,7 @@ void ParseEngine<EventHandler>::_handle_unk()
76747703 _c4dbgp (" runk: start new block map, set double-quoted scalar as key" );
76757704 _handle_annotations_before_start_mapblck (startline);
76767705 m_evt_handler->begin_map_val_block ();
7706+ _handle_colon ();
76777707 _handle_annotations_and_indentation_after_start_mapblck (startindent, startline);
76787708 csubstr maybe_filtered = _maybe_filter_key_scalar_dquot (sc);
76797709 m_evt_handler->set_key_scalar_dquoted (maybe_filtered);
@@ -7742,6 +7772,7 @@ void ParseEngine<EventHandler>::_handle_unk()
77427772 {
77437773 _c4dbgp (" runk: start new block map, set scalar as key" );
77447774 _handle_annotations_before_start_mapblck (startline);
7775+ _handle_colon ();
77457776 m_evt_handler->begin_map_val_block ();
77467777 _handle_annotations_and_indentation_after_start_mapblck (startindent, startline);
77477778 csubstr maybe_filtered = _maybe_filter_key_scalar_plain (sc, startindent);
0 commit comments