@@ -381,34 +381,46 @@ impl YaccParser {
381381 update_yacc_kind : bool ,
382382 ) -> Result < usize , YaccGrammarError > {
383383 // Compares haystack converted to lowercase to needle (assumed to be lowercase).
384- fn starts_with_lower ( needle : & ' static str , haystack : & ' _ str ) -> bool {
384+ fn starts_with_lower ( needle : & ' _ str , haystack : & ' _ str ) -> bool {
385385 if let Some ( ( prefix, _) ) = haystack. split_at_checked ( needle. len ( ) ) {
386386 prefix. to_lowercase ( ) == needle
387387 } else {
388388 false
389389 }
390390 }
391+ const ACTION_KINDS : [ ( & str , YaccOriginalActionKind ) ; 3 ] = [
392+ ( "noaction" , YaccOriginalActionKind :: NoAction ) ,
393+ ( "useraction" , YaccOriginalActionKind :: UserAction ) ,
394+ ( "genericparsetree" , YaccOriginalActionKind :: GenericParseTree ) ,
395+ ] ;
391396
392- const YACC_KINDS : [ ( & str , YaccKind ) ; 5 ] = [
393- ( "grmtools" , YaccKind :: Grmtools ) ,
394- (
395- "original(noaction)" ,
396- YaccKind :: Original ( YaccOriginalActionKind :: NoAction ) ,
397- ) ,
398- (
399- "original(useraction)" ,
400- YaccKind :: Original ( YaccOriginalActionKind :: UserAction ) ,
401- ) ,
402- (
403- "original(genericparsetree)" ,
404- YaccKind :: Original ( YaccOriginalActionKind :: GenericParseTree ) ,
405- ) ,
406- ( "Eco" , YaccKind :: Eco ) ,
397+ let mut yacc_kinds = vec ! [
398+ ( "grmtools" . to_string( ) , YaccKind :: Grmtools ) ,
399+ ( "yacckind::grmtools" . to_string( ) , YaccKind :: Grmtools ) ,
400+ ( "Eco" . to_string( ) , YaccKind :: Eco ) ,
401+ ( "yackind::Eco" . to_string( ) , YaccKind :: Eco ) ,
407402 ] ;
403+ for ( name, action_kind) in ACTION_KINDS {
404+ let yk = "YaccKind" . to_lowercase ( ) ;
405+ let ak = "YaccOriginalActionKind" . to_lowercase ( ) ;
406+ yacc_kinds. push ( ( format ! ( "original({name})" ) , YaccKind :: Original ( action_kind) ) ) ;
407+ yacc_kinds. push ( (
408+ format ! ( "{yk}::original({name})" ) ,
409+ YaccKind :: Original ( action_kind) ,
410+ ) ) ;
411+ yacc_kinds. push ( (
412+ format ! ( "{yk}::original({ak}::{name})" ) ,
413+ YaccKind :: Original ( action_kind) ,
414+ ) ) ;
415+ yacc_kinds. push ( (
416+ format ! ( "original({ak}::{name})" ) ,
417+ YaccKind :: Original ( action_kind) ,
418+ ) ) ;
419+ }
408420 let j = self . parse_ws ( i, false ) ?;
409421 let s = & self . src [ i..] ;
410- for ( kind_name, kind) in YACC_KINDS {
411- if starts_with_lower ( kind_name, s) {
422+ for ( kind_name, kind) in yacc_kinds {
423+ if starts_with_lower ( & kind_name, s) {
412424 if update_yacc_kind {
413425 self . yacc_kind = Some ( kind) ;
414426 }
0 commit comments