@@ -527,6 +527,7 @@ static OPERATORS: &[&str] = &[
527527 "^=" , // Bitwise exclusive OR and assignment
528528 "|" , // Bitwise OR
529529 "|=" , // Bitwise OR and assignment
530+ "|>" , // Expression piping
530531 "." , // Member access
531532 ".." , // Range operator
532533 ":" , // Type separator
@@ -581,6 +582,8 @@ pub enum InfixOpTag {
581582 Catch ,
582583
583584 ErrorPropagation ,
585+
586+ ExprPipe ,
584587}
585588
586589pub struct InfixOp {
@@ -600,37 +603,39 @@ impl InfixOp {
600603 }
601604
602605 match token. get_value ( source) {
603- "catch" => op ( token, Catch , 13 , L ) ,
606+ "catch" => op ( token, Catch , 14 , Left ) ,
607+
608+ "." => op ( token, FieldAccess , 13 , Left ) ,
604609
605- ". " => op ( token, FieldAccess , 12 , L ) ,
610+ "? " => op ( token, ErrorPropagation , 12 , None ) ,
606611
607- "? " => op ( token, ErrorPropagation , 11 , None ) ,
612+ "as " => op ( token, Cast , 11 , Left ) ,
608613
609- "as" => op ( token, Cast , 10 , L ) ,
614+ "%" => op ( token, Mod , 10 , Left ) ,
615+ "/" => op ( token, Div , 10 , Left ) ,
616+ "*" => op ( token, Mul , 10 , Left ) ,
610617
611- "%" => op ( token, Mod , 9 , L ) ,
612- "/" => op ( token, Div , 9 , L ) ,
613- "*" => op ( token, Mul , 9 , L ) ,
618+ "-" => op ( token, Sub , 9 , Left ) ,
619+ "+" => op ( token, Add , 9 , Left ) ,
614620
615- "- " => op ( token, Sub , 8 , L ) ,
616- "+ " => op ( token, Add , 8 , L ) ,
621+ ">> " => op ( token, ShiftRight , 8 , Left ) ,
622+ "<< " => op ( token, ShiftLeft , 8 , Left ) ,
617623
618- ">>" => op ( token, ShiftRight , 7 , L ) ,
619- "<<" => op ( token, ShiftLeft , 7 , L ) ,
624+ "&" => op ( token, BitAnd , 7 , Left ) ,
620625
621- "& " => op ( token, BitAnd , 6 , L ) ,
626+ "| " => op ( token, BitOr , 6 , Left ) ,
622627
623- "|" => op ( token, BitOr , 5 , L ) ,
628+ ">=" => op ( token, GreaterEqual , 5 , Left ) ,
629+ ">" => op ( token, Greater , 5 , Left ) ,
630+ "<=" => op ( token, LessEqual , 5 , Left ) ,
631+ "<" => op ( token, Less , 5 , Left ) ,
632+ "!=" => op ( token, NotEqual , 5 , None ) ,
633+ "==" => op ( token, Equal , 5 , None ) ,
624634
625- ">=" => op ( token, GreaterEqual , 4 , L ) ,
626- ">" => op ( token, Greater , 4 , L ) ,
627- "<=" => op ( token, LessEqual , 4 , L ) ,
628- "<" => op ( token, Less , 4 , L ) ,
629- "!=" => op ( token, NotEqual , 4 , None ) ,
630- "==" => op ( token, Equal , 4 , None ) ,
635+ "&&" => op ( token, And , 4 , Left ) ,
636+ "||" => op ( token, Or , 3 , Left ) ,
631637
632- "&&" => op ( token, And , 3 , L ) ,
633- "||" => op ( token, Or , 2 , L ) ,
638+ "|>" => op ( token, ExprPipe , 2 , Left ) ,
634639
635640 "=" => op ( token, Assign , 1 , None ) ,
636641 "+=" => op ( token, AddAssign , 1 , None ) ,
@@ -666,10 +671,10 @@ impl PrefixOp {
666671 use PrefixOpTag :: * ;
667672
668673 let ( tag, info) = match token. get_value ( source) {
669- "!" => ( Not , OpInfo { bp : 8 , assoc : L } ) ,
670- "*" => ( Dereference , OpInfo { bp : 8 , assoc : L } ) ,
671- "+" => ( Positive , OpInfo { bp : 9 , assoc : L } ) ,
672- "-" => ( Negative , OpInfo { bp : 9 , assoc : L } ) ,
674+ "!" => ( Not , OpInfo { bp : 8 , assoc : Left } ) ,
675+ "*" => ( Dereference , OpInfo { bp : 8 , assoc : Left } ) ,
676+ "+" => ( Positive , OpInfo { bp : 9 , assoc : Left } ) ,
677+ "-" => ( Negative , OpInfo { bp : 9 , assoc : Left } ) ,
673678 _ => return Option :: None ,
674679 } ;
675680 Some ( Self { tag, info, token } )
@@ -678,7 +683,7 @@ impl PrefixOp {
678683
679684#[ derive( PartialEq ) ]
680685pub enum OpAssoc {
681- L ,
686+ Left ,
682687 None ,
683688}
684689
@@ -689,7 +694,7 @@ pub struct OpInfo {
689694
690695impl OpInfo {
691696 pub fn get_min_bp_for_next ( & self ) -> u32 {
692- if self . assoc == OpAssoc :: L {
697+ if self . assoc == OpAssoc :: Left {
693698 self . bp + 1
694699 } else {
695700 self . bp
0 commit comments