Parse deref and borrow
This commit is contained in:
		
							parent
							
								
									8bb337dbca
								
							
						
					
					
						commit
						ba8ee770fb
					
				| @ -42,6 +42,8 @@ pub struct Expression(pub ExpressionKind, pub TokenRange); | ||||
| #[derive(Debug, Clone)] | ||||
| pub enum ExpressionKind { | ||||
|     VariableName(String), | ||||
|     Borrow(String), | ||||
|     Deref(String), | ||||
|     Literal(Literal), | ||||
|     Array(Vec<Expression>), | ||||
|     /// Array-indexed, e.g. <expr>[<expr>]
 | ||||
|  | ||||
| @ -83,6 +83,18 @@ impl Parse for PrimaryExpression { | ||||
|                 Kind::StructExpression(stream.parse()?), | ||||
|                 stream.get_range().unwrap(), | ||||
|             ) | ||||
|         } else if let (Some(Token::Et), Some(Token::Identifier(name))) = | ||||
|             (stream.peek(), stream.peek2()) | ||||
|         { | ||||
|             stream.next(); // Consume Et
 | ||||
|             stream.next(); // Consume identifier
 | ||||
|             Expression(Kind::Borrow(name), stream.get_range().unwrap()) | ||||
|         } else if let (Some(Token::Star), Some(Token::Identifier(name))) = | ||||
|             (stream.peek(), stream.peek2()) | ||||
|         { | ||||
|             stream.next(); // Consume Et
 | ||||
|             stream.next(); // Consume identifier
 | ||||
|             Expression(Kind::Deref(name), stream.get_range().unwrap()) | ||||
|         } else if let Some(token) = stream.next() { | ||||
|             match &token { | ||||
|                 Token::Identifier(v) => { | ||||
| @ -229,7 +241,7 @@ impl Parse for BinaryOperator { | ||||
| 
 | ||||
|             (Some(Token::Plus), _) => BinaryOperator::Add, | ||||
|             (Some(Token::Minus), _) => BinaryOperator::Minus, | ||||
|             (Some(Token::Times), _) => BinaryOperator::Mult, | ||||
|             (Some(Token::Star), _) => BinaryOperator::Mult, | ||||
|             (_, _) => Err(stream.expected_err("expected operator")?)?, | ||||
|         }) | ||||
|     } | ||||
|  | ||||
| @ -225,6 +225,8 @@ impl ast::Expression { | ||||
|                 mir::TypeKind::Vague(mir::VagueType::Unknown), | ||||
|                 name.clone(), | ||||
|             ), | ||||
|             ast::ExpressionKind::Borrow(_) => todo!(), | ||||
|             ast::ExpressionKind::Deref(_) => todo!(), | ||||
|         }; | ||||
| 
 | ||||
|         mir::Expression(kind, self.1.as_meta(module_id)) | ||||
|  | ||||
| @ -49,7 +49,7 @@ pub enum Token { | ||||
|     /// `+`
 | ||||
|     Plus, | ||||
|     /// `*`
 | ||||
|     Times, | ||||
|     Star, | ||||
|     /// `-`
 | ||||
|     Minus, | ||||
| 
 | ||||
| @ -87,7 +87,7 @@ impl Token { | ||||
|         match &self { | ||||
|             Token::Plus => 10, | ||||
|             Token::Minus => 10, | ||||
|             Token::Times => 20, | ||||
|             Token::Star => 20, | ||||
|             _ => -1, | ||||
|         } | ||||
|     } | ||||
| @ -128,7 +128,7 @@ impl ToString for Token { | ||||
|             Token::Equals => String::from('='), | ||||
|             Token::Colon => String::from(':'), | ||||
|             Token::Plus => String::from('+'), | ||||
|             Token::Times => String::from('*'), | ||||
|             Token::Star => String::from('*'), | ||||
|             Token::Minus => String::from('-'), | ||||
|             Token::GreaterThan => String::from('>'), | ||||
|             Token::LessThan => String::from('<'), | ||||
| @ -311,7 +311,7 @@ pub fn tokenize<T: Into<String>>(to_tokenize: T) -> Result<Vec<FullToken>, Error | ||||
|             ';' => Token::Semi, | ||||
|             ':' => Token::Colon, | ||||
|             '+' => Token::Plus, | ||||
|             '*' => Token::Times, | ||||
|             '*' => Token::Star, | ||||
|             '-' => Token::Minus, | ||||
|             '>' => Token::GreaterThan, | ||||
|             '<' => Token::LessThan, | ||||
|  | ||||
							
								
								
									
										11
									
								
								reid_src/borrow.reid
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								reid_src/borrow.reid
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | ||||
| // Arithmetic, function calls and imports! | ||||
| 
 | ||||
| 
 | ||||
| fn main() -> u32 { | ||||
|   let mut value = 6; | ||||
| 
 | ||||
|   let mut borrow = &value; | ||||
|   *borrow = 17; | ||||
| 
 | ||||
|   return borrow; | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user