@@ -4949,7 +4949,7 @@ impl<'a> Parser<'a> {
49494949 while self . match_token ( & [ TokenType :: BangEqual , TokenType :: EqualEqual ] ) {
49504950 // let line = self.previous().line;
49514951 let operator_token = self . previous ( ) ;
4952- let op_type = OperatorType :: get_operator_type ( & operator_token. token_type ) ;
4952+ let op_type = self . get_operator_type ( & operator_token. clone ( ) ) ;
49534953 let r_value = match self . comparison ( ) {
49544954 Ok ( Some ( expr_type) ) => expr_type,
49554955 Ok ( None ) => return Ok ( None ) ,
@@ -4988,7 +4988,7 @@ impl<'a> Parser<'a> {
49884988 TokenType :: LessEqual ,
49894989 ] ) {
49904990 let operator_token = self . previous ( ) ;
4991- let op_type = OperatorType :: get_operator_type ( & operator_token. token_type ) ;
4991+ let op_type = self . get_operator_type ( & operator_token. clone ( ) ) ;
49924992 let r_value = match self . term ( ) {
49934993 Ok ( Some ( expr_type) ) => expr_type,
49944994 Ok ( None ) => return Ok ( None ) ,
@@ -5020,9 +5020,9 @@ impl<'a> Parser<'a> {
50205020 Err ( parse_error) => return Err ( parse_error) ,
50215021 } ;
50225022
5023- while self . match_token ( & [ TokenType :: Dash , TokenType :: Plus ] ) {
5023+ while self . match_token ( & [ TokenType :: Dash , TokenType :: Plus , TokenType :: Percent ] ) {
50245024 let operator_token = self . previous ( ) . clone ( ) ;
5025- let op_type = OperatorType :: get_operator_type ( & operator_token. token_type ) ;
5025+ let op_type = self . get_operator_type ( & operator_token. clone ( ) ) ;
50265026 let r_value = match self . factor ( ) {
50275027 Ok ( Some ( expr_type) ) => expr_type,
50285028 Ok ( None ) => {
@@ -5065,7 +5065,7 @@ impl<'a> Parser<'a> {
50655065
50665066 while self . match_token ( & [ TokenType :: ForwardSlash , TokenType :: Star ] ) {
50675067 let operator_token = self . previous ( ) ;
5068- let op_type = OperatorType :: get_operator_type ( & operator_token. token_type ) ;
5068+ let op_type = self . get_operator_type ( & operator_token. clone ( ) ) ;
50695069 let r_value = match self . logical_xor ( ) {
50705070 Ok ( Some ( expr_type) ) => expr_type,
50715071 Ok ( None ) => return Ok ( None ) ,
@@ -5090,7 +5090,7 @@ impl<'a> Parser<'a> {
50905090
50915091 while self . match_token ( & [ TokenType :: LogicalXor ] ) {
50925092 let operator_token = self . previous ( ) ;
5093- let op_type = OperatorType :: get_operator_type ( & operator_token. token_type ) ;
5093+ let op_type = self . get_operator_type ( & operator_token. clone ( ) ) ;
50945094 let r_value = match self . logical_or ( ) {
50955095 Ok ( Some ( expr_type) ) => expr_type,
50965096 Ok ( None ) => return Ok ( None ) ,
@@ -5124,7 +5124,7 @@ impl<'a> Parser<'a> {
51245124
51255125 while self . match_token ( & [ TokenType :: PipePipe ] ) {
51265126 let operator_token = self . previous ( ) ;
5127- let op_type = OperatorType :: get_operator_type ( & operator_token. token_type ) ;
5127+ let op_type = self . get_operator_type ( & operator_token. clone ( ) ) ;
51285128 let r_value = match self . logical_and ( ) {
51295129 Ok ( Some ( expr_type) ) => expr_type,
51305130 Ok ( None ) => return Ok ( None ) ,
@@ -5158,7 +5158,7 @@ impl<'a> Parser<'a> {
51585158
51595159 while self . match_token ( & [ TokenType :: LogicalAnd ] ) {
51605160 let operator_token = self . previous ( ) ;
5161- let op_type = OperatorType :: get_operator_type ( & operator_token. token_type ) ;
5161+ let op_type = self . get_operator_type ( & operator_token. clone ( ) ) ;
51625162 let r_value = match self . unary_expression ( ) {
51635163 Ok ( Some ( expr_type) ) => expr_type,
51645164 Ok ( None ) => return Ok ( None ) ,
@@ -5331,7 +5331,7 @@ impl<'a> Parser<'a> {
53315331 fn unary_expression ( & mut self ) -> Result < Option < ExprType > , ParseError > {
53325332 if self . match_token ( & [ TokenType :: Bang , TokenType :: Dash ] ) {
53335333 let token = self . previous ( ) ;
5334- let mut operator_type = OperatorType :: get_operator_type ( & token. token_type ) ;
5334+ let mut operator_type = self . get_operator_type ( & token. clone ( ) ) ;
53355335 if operator_type == OperatorType :: Minus {
53365336 // change this so the code gen doesn't have a space between the - and ID
53375337 // -x rather than - x
@@ -8072,4 +8072,15 @@ impl<'a> Parser<'a> {
80728072 Ok ( ( ) )
80738073 }
80748074 }
8075+
8076+ // ------------------------------------------------------------------ */
8077+ pub fn get_operator_type ( & mut self , operator_token : & Token ) -> OperatorType {
8078+ let op_type = OperatorType :: get_operator_type ( & operator_token. token_type ) ;
8079+ if op_type == OperatorType :: Unknown {
8080+ let err_msg = & format ! ( "Unknown operator {}" , operator_token. lexeme) ;
8081+ self . error_at_current ( err_msg) ;
8082+ }
8083+
8084+ op_type
8085+ }
80758086}
0 commit comments