@@ -4,7 +4,7 @@ use ast::{make_node, tree::{ASTTreeNode, ASTTreeNodeKind}};
44use diagnostics:: { DiagnosticResult , builders:: { make_expected_simple_error, make_unexpected_simple_error} } ;
55use lexer:: token:: { LexerToken , LexerTokenType } ;
66
7- use crate :: { arrays:: parse_array_access, functions:: parse_function_call, structs:: val:: parse_struct_initialize, unwraps:: { parse_unwrap_condition, parse_unwrap_value} } ;
7+ use crate :: { arrays:: parse_array_access, comp :: parse_ast_compare , functions:: parse_function_call, structs:: val:: parse_struct_initialize, unwraps:: { parse_unwrap_condition, parse_unwrap_value} } ;
88use crate :: literals:: { parse_integer_literal, parse_string_literal} ;
99use crate :: math:: parse_math_operation;
1010
@@ -78,7 +78,7 @@ pub fn parse_ast_value_dotacess_chain_member(tokens: &Vec<LexerToken>, ind: &mut
7878///
7979pub fn parse_ast_value_post_l ( tokens : & Vec < LexerToken > , ind : & mut usize , original : DiagnosticResult < Box < ASTTreeNode > > , invoked_on_body : bool ) -> DiagnosticResult < Box < ASTTreeNode > > {
8080 match & tokens[ * ind] . tok_type {
81- LexerTokenType :: MathOperator ( _ , _ ) => {
81+ LexerTokenType :: Plus | LexerTokenType :: Minus | LexerTokenType :: Asterisk | LexerTokenType :: Divide => {
8282 let o = & original?;
8383 let k = Box :: new ( ASTTreeNode :: clone ( o. as_ref ( ) ) ) ;
8484
@@ -92,6 +92,10 @@ pub fn parse_ast_value_post_l(tokens: &Vec<LexerToken>, ind: &mut usize, origina
9292 } ,
9393
9494 LexerTokenType :: EqualSign => {
95+ if tokens[ * ind + 1 ] . tok_type == LexerTokenType :: EqualSign {
96+ return parse_ast_compare ( tokens, ind, original. clone ( ) ?) ;
97+ }
98+
9599 * ind += 1 ;
96100
97101 if let Ok ( v) = original. as_ref ( ) {
@@ -118,20 +122,7 @@ pub fn parse_ast_value_post_l(tokens: &Vec<LexerToken>, ind: &mut usize, origina
118122 return Ok ( Box :: new ( ASTTreeNode :: new ( kind, start, end) ) ) ;
119123 } ,
120124
121- LexerTokenType :: ComparingOperator ( op) => {
122- let operator = op. clone ( ) ;
123-
124- let o = & original?;
125- let k = Box :: new ( ASTTreeNode :: clone ( o. as_ref ( ) ) ) ;
126-
127- * ind += 1 ;
128- let right_val = parse_ast_value ( tokens, ind) ?;
129-
130- let start_pos = k. start . clone ( ) ;
131- let end_pos = right_val. end . clone ( ) ;
132-
133- return Ok ( Box :: new ( ASTTreeNode :: new ( ASTTreeNodeKind :: OperatorBasedConditionMember { lval : k, rval : right_val, operator } , start_pos, end_pos) ) ) ;
134- } ,
125+ LexerTokenType :: ExclamationMark | LexerTokenType :: AngelBracketOpen | LexerTokenType :: AngelBracketClose => return parse_ast_compare ( tokens, ind, original. clone ( ) ?) ,
135126
136127 _ => return original
137128 }
0 commit comments