@@ -4611,6 +4611,24 @@ size_t ParseEngine<EventHandler>::_select_indentation_from_annotations(size_t va
46114611 return curr->line < val_line ? val_indentation : curr->indentation ;
46124612}
46134613
4614+ template <class EventHandler >
4615+ void ParseEngine<EventHandler>::_handle_keyref(csubstr alias)
4616+ {
4617+ if (C4_LIKELY (!(m_pending_anchors.num_entries | m_pending_tags.num_entries )))
4618+ m_evt_handler->set_key_ref (alias);
4619+ else
4620+ _c4err (" aliases cannot have anchors or tags" );
4621+ }
4622+
4623+ template <class EventHandler >
4624+ void ParseEngine<EventHandler>::_handle_valref(csubstr alias)
4625+ {
4626+ if (C4_LIKELY (!(m_pending_anchors.num_entries | m_pending_tags.num_entries )))
4627+ m_evt_handler->set_val_ref (alias);
4628+ else
4629+ _c4err (" aliases cannot have anchors or tags" );
4630+ }
4631+
46144632template <class EventHandler >
46154633void ParseEngine<EventHandler>::_handle_directive(csubstr rem)
46164634{
@@ -5100,7 +5118,7 @@ void ParseEngine<EventHandler>::_handle_seq_imap()
51005118 {
51015119 csubstr ref = _scan_ref_seq ();
51025120 _c4dbgpf (" seqimap[RVAL]: ref! {}" , _prs (ref));
5103- m_evt_handler-> set_val_ref (ref);
5121+ _handle_valref (ref);
51045122 addrem_flags (RNXT, RVAL);
51055123 }
51065124 else if (first == ' &' )
@@ -5215,7 +5233,7 @@ void ParseEngine<EventHandler>::_handle_seq_imap()
52155233 {
52165234 csubstr ref = _scan_ref_seq ();
52175235 _c4dbgp (" seqimap[QMRK]: ref!" );
5218- m_evt_handler-> set_key_ref (ref);
5236+ _handle_keyref (ref);
52195237 addrem_flags (RKCL, QMRK);
52205238 }
52215239 else
@@ -5356,7 +5374,7 @@ void ParseEngine<EventHandler>::_handle_seq_flow()
53565374 else if (first == ' ]' ) // this happens on cases such as [] or [.., ]
53575375 {
53585376 _c4dbgp (" seqflow[RVAL]: end!" );
5359- if (m_pending_anchors.num_entries || m_pending_tags.num_entries )
5377+ if (m_pending_anchors.num_entries | m_pending_tags.num_entries )
53605378 {
53615379 _c4dbgp (" seqflow[RVAL]: add pending annotations" );
53625380 _handle_annotations_before_blck_val_scalar ();
@@ -5604,7 +5622,7 @@ void ParseEngine<EventHandler>::_handle_map_flow()
56045622 {
56055623 csubstr ref = _scan_ref_map ();
56065624 _c4dbgpf (" mapflow[RKEY]: key ref! {}" , _prs (ref));
5607- m_evt_handler-> set_key_ref (ref);
5625+ _handle_keyref (ref);
56085626 addrem_flags (RKCL, RKEY);
56095627 }
56105628 else if (first == ' [' )
@@ -5752,7 +5770,7 @@ void ParseEngine<EventHandler>::_handle_map_flow()
57525770 {
57535771 csubstr ref = _scan_ref_map ();
57545772 _c4dbgpf (" mapflow[RVAL]: key ref! {}" , _prs (ref));
5755- m_evt_handler-> set_val_ref (ref);
5773+ _handle_valref (ref);
57565774 addrem_flags (RNXT, RVAL);
57575775 }
57585776 else if (first == ' &' )
@@ -5869,7 +5887,7 @@ void ParseEngine<EventHandler>::_handle_map_flow()
58695887 {
58705888 csubstr ref = _scan_ref_map ();
58715889 _c4dbgpf (" mapflow[QMRK]: key ref! {}" , _prs (ref));
5872- m_evt_handler-> set_key_ref (ref);
5890+ _handle_keyref (ref);
58735891 addrem_flags (RKCL, QMRK);
58745892 }
58755893 else if (first == ' [' )
@@ -6205,8 +6223,7 @@ void ParseEngine<EventHandler>::_handle_seq_block()
62056223 if (!_maybe_scan_following_colon ())
62066224 {
62076225 _c4dbgp (" seqblck[RVAL]: set ref as val!" );
6208- _handle_annotations_before_blck_val_scalar ();
6209- m_evt_handler->set_val_ref (ref);
6226+ _handle_valref (ref);
62106227 addrem_flags (RNXT, RVAL);
62116228 }
62126229 else
@@ -6216,7 +6233,7 @@ void ParseEngine<EventHandler>::_handle_seq_block()
62166233 _handle_annotations_before_start_mapblck (startline);
62176234 m_evt_handler->begin_map_val_block ();
62186235 _handle_annotations_and_indentation_after_start_mapblck (startindent, startline);
6219- m_evt_handler-> set_key_ref (ref);
6236+ _handle_keyref (ref);
62206237 addrem_flags (RMAP|RVAL, RSEQ|RNXT);
62216238 _set_indentation (startindent);
62226239 _maybe_skip_whitespace_tokens ();
@@ -6573,8 +6590,7 @@ void ParseEngine<EventHandler>::_handle_map_block()
65736590 {
65746591 csubstr ref = _scan_ref_map ();
65756592 _c4dbgpf (" mapblck[RKEY]: key ref! {}" , _prs (ref));
6576- _handle_annotations_before_blck_key_scalar ();
6577- m_evt_handler->set_key_ref (ref);
6593+ _handle_keyref (ref);
65786594 addrem_flags (RVAL, RKEY);
65796595 if (!_maybe_scan_following_colon ())
65806596 _c4err (" could not find ':' colon after key" );
@@ -6961,7 +6977,7 @@ void ParseEngine<EventHandler>::_handle_map_block()
69616977 if (startindent == m_evt_handler->m_curr ->indref )
69626978 {
69636979 _c4dbgpf (" mapblck[RVAL]: same indentation {}" , startindent);
6964- m_evt_handler-> set_val_ref (ref);
6980+ _handle_valref (ref);
69656981 addrem_flags (RNXT, RVAL);
69666982 }
69676983 else
@@ -6972,18 +6988,16 @@ void ParseEngine<EventHandler>::_handle_map_block()
69726988 {
69736989 _c4dbgp (" mapblck[RVAL]: start child map, block" );
69746990 addrem_flags (RNXT, RVAL);
6975- _handle_annotations_before_blck_val_scalar ();
69766991 m_evt_handler->begin_map_val_block ();
6977- m_evt_handler-> set_key_ref (ref);
6992+ _handle_keyref (ref);
69786993 _set_indentation (startindent);
69796994 // keep going in RVAL
69806995 addrem_flags (RVAL, RNXT);
69816996 }
69826997 else
69836998 {
69846999 _c4dbgp (" mapblck[RVAL]: was val ref" );
6985- _handle_annotations_before_blck_val_scalar ();
6986- m_evt_handler->set_val_ref (ref);
7000+ _handle_valref (ref);
69877001 addrem_flags (RNXT, RVAL);
69887002 }
69897003 }
@@ -7420,15 +7434,13 @@ bool ParseEngine<EventHandler>::_handle_map_block_qmrk()
74207434 if (!_maybe_scan_following_colon ())
74217435 {
74227436 _c4dbgp (" mapblck[QMRK]: set ref as key" );
7423- _handle_annotations_before_blck_key_scalar ();
7424- m_evt_handler->set_key_ref (ref);
7437+ _handle_keyref (ref);
74257438 }
74267439 else
74277440 {
74287441 _c4dbgp (" mapblck[QMRK]: start new block map as key (!), set ref as key" );
7429- _handle_annotations_before_blck_key_scalar ();
74307442 m_evt_handler->begin_map_key_block ();
7431- m_evt_handler-> set_key_ref (ref);
7443+ _handle_keyref (ref);
74327444 _set_indentation (startindent);
74337445 // keep the child state on RVAL
74347446 addrem_flags (RVAL, RKCL|QMRK);
@@ -7962,8 +7974,7 @@ void ParseEngine<EventHandler>::_handle_unk()
79627974 if (!_maybe_scan_following_colon ())
79637975 {
79647976 _c4dbgp (" runk: set val ref" );
7965- _handle_annotations_before_blck_val_scalar ();
7966- m_evt_handler->set_val_ref (ref);
7977+ _handle_valref (ref);
79677978 }
79687979 else
79697980 {
@@ -7972,8 +7983,7 @@ void ParseEngine<EventHandler>::_handle_unk()
79727983 const size_t startline = m_evt_handler->m_curr ->pos .line ; // save
79737984 _handle_annotations_before_start_mapblck (startline);
79747985 m_evt_handler->begin_map_val_block ();
7975- _handle_annotations_and_indentation_after_start_mapblck (startindent, startline);
7976- m_evt_handler->set_key_ref (ref);
7986+ _handle_keyref (ref);
79777987 _maybe_skip_whitespace_tokens ();
79787988 _set_indentation (0 );
79797989 addrem_flags (RMAP|RBLCK|RVAL, RTOP|RUNK|RDOC);
@@ -8262,8 +8272,7 @@ C4_COLD void ParseEngine<EventHandler>::_handle_usty()
82628272 add_flags (RNXT);
82638273 _handle_annotations_before_start_mapblck (startline);
82648274 m_evt_handler->_push ();
8265- _handle_annotations_and_indentation_after_start_mapblck (startindent, startline);
8266- m_evt_handler->set_key_ref (ref);
8275+ _handle_keyref (ref);
82678276 _maybe_skip_whitespace_tokens ();
82688277 _set_indentation (startindent);
82698278 addrem_flags (RMAP|RBLCK|RVAL, RNXT|USTY);
@@ -8445,8 +8454,7 @@ C4_COLD void ParseEngine<EventHandler>::_handle_usty()
84458454 if (!_maybe_scan_following_colon ())
84468455 {
84478456 _c4dbgp (" usty[UNK]: set val ref" );
8448- _handle_annotations_before_blck_val_scalar ();
8449- m_evt_handler->set_val_ref (ref);
8457+ _handle_valref (ref);
84508458 }
84518459 else
84528460 {
@@ -8455,8 +8463,7 @@ C4_COLD void ParseEngine<EventHandler>::_handle_usty()
84558463 add_flags (RNXT);
84568464 _handle_annotations_before_start_mapblck (startline);
84578465 m_evt_handler->begin_map_val_block ();
8458- _handle_annotations_and_indentation_after_start_mapblck (startindent, startline);
8459- m_evt_handler->set_key_ref (ref);
8466+ _handle_keyref (ref);
84608467 _maybe_skip_whitespace_tokens ();
84618468 _set_indentation (startindent);
84628469 addrem_flags (RMAP|RBLCK|RVAL, RNXT|USTY);
0 commit comments