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)]
|
#[derive(Debug, Clone)]
|
||||||
pub enum ExpressionKind {
|
pub enum ExpressionKind {
|
||||||
VariableName(String),
|
VariableName(String),
|
||||||
|
Borrow(String),
|
||||||
|
Deref(String),
|
||||||
Literal(Literal),
|
Literal(Literal),
|
||||||
Array(Vec<Expression>),
|
Array(Vec<Expression>),
|
||||||
/// Array-indexed, e.g. <expr>[<expr>]
|
/// Array-indexed, e.g. <expr>[<expr>]
|
||||||
|
@ -83,6 +83,18 @@ impl Parse for PrimaryExpression {
|
|||||||
Kind::StructExpression(stream.parse()?),
|
Kind::StructExpression(stream.parse()?),
|
||||||
stream.get_range().unwrap(),
|
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() {
|
} else if let Some(token) = stream.next() {
|
||||||
match &token {
|
match &token {
|
||||||
Token::Identifier(v) => {
|
Token::Identifier(v) => {
|
||||||
@ -229,7 +241,7 @@ impl Parse for BinaryOperator {
|
|||||||
|
|
||||||
(Some(Token::Plus), _) => BinaryOperator::Add,
|
(Some(Token::Plus), _) => BinaryOperator::Add,
|
||||||
(Some(Token::Minus), _) => BinaryOperator::Minus,
|
(Some(Token::Minus), _) => BinaryOperator::Minus,
|
||||||
(Some(Token::Times), _) => BinaryOperator::Mult,
|
(Some(Token::Star), _) => BinaryOperator::Mult,
|
||||||
(_, _) => Err(stream.expected_err("expected operator")?)?,
|
(_, _) => Err(stream.expected_err("expected operator")?)?,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -225,6 +225,8 @@ impl ast::Expression {
|
|||||||
mir::TypeKind::Vague(mir::VagueType::Unknown),
|
mir::TypeKind::Vague(mir::VagueType::Unknown),
|
||||||
name.clone(),
|
name.clone(),
|
||||||
),
|
),
|
||||||
|
ast::ExpressionKind::Borrow(_) => todo!(),
|
||||||
|
ast::ExpressionKind::Deref(_) => todo!(),
|
||||||
};
|
};
|
||||||
|
|
||||||
mir::Expression(kind, self.1.as_meta(module_id))
|
mir::Expression(kind, self.1.as_meta(module_id))
|
||||||
|
@ -49,7 +49,7 @@ pub enum Token {
|
|||||||
/// `+`
|
/// `+`
|
||||||
Plus,
|
Plus,
|
||||||
/// `*`
|
/// `*`
|
||||||
Times,
|
Star,
|
||||||
/// `-`
|
/// `-`
|
||||||
Minus,
|
Minus,
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ impl Token {
|
|||||||
match &self {
|
match &self {
|
||||||
Token::Plus => 10,
|
Token::Plus => 10,
|
||||||
Token::Minus => 10,
|
Token::Minus => 10,
|
||||||
Token::Times => 20,
|
Token::Star => 20,
|
||||||
_ => -1,
|
_ => -1,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -128,7 +128,7 @@ impl ToString for Token {
|
|||||||
Token::Equals => String::from('='),
|
Token::Equals => String::from('='),
|
||||||
Token::Colon => String::from(':'),
|
Token::Colon => String::from(':'),
|
||||||
Token::Plus => String::from('+'),
|
Token::Plus => String::from('+'),
|
||||||
Token::Times => String::from('*'),
|
Token::Star => String::from('*'),
|
||||||
Token::Minus => String::from('-'),
|
Token::Minus => String::from('-'),
|
||||||
Token::GreaterThan => String::from('>'),
|
Token::GreaterThan => String::from('>'),
|
||||||
Token::LessThan => 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::Semi,
|
||||||
':' => Token::Colon,
|
':' => Token::Colon,
|
||||||
'+' => Token::Plus,
|
'+' => Token::Plus,
|
||||||
'*' => Token::Times,
|
'*' => Token::Star,
|
||||||
'-' => Token::Minus,
|
'-' => Token::Minus,
|
||||||
'>' => Token::GreaterThan,
|
'>' => Token::GreaterThan,
|
||||||
'<' => Token::LessThan,
|
'<' => 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