Add parsing pointer-type
This commit is contained in:
parent
c9b363d9e8
commit
3b43689650
@ -28,6 +28,7 @@ pub enum TypeKind {
|
|||||||
Array(Box<TypeKind>, u64),
|
Array(Box<TypeKind>, u64),
|
||||||
Custom(String),
|
Custom(String),
|
||||||
Borrow(Box<TypeKind>, bool),
|
Borrow(Box<TypeKind>, bool),
|
||||||
|
Ptr(Box<TypeKind>),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
|
@ -35,6 +35,10 @@ impl Parse for Type {
|
|||||||
|
|
||||||
let inner = stream.parse::<Type>()?;
|
let inner = stream.parse::<Type>()?;
|
||||||
TypeKind::Borrow(Box::new(inner.0), mutable)
|
TypeKind::Borrow(Box::new(inner.0), mutable)
|
||||||
|
} else if let Some(Token::Star) = stream.peek() {
|
||||||
|
stream.expect(Token::Star)?;
|
||||||
|
let inner = stream.parse::<Type>()?;
|
||||||
|
TypeKind::Ptr(Box::new(inner.0))
|
||||||
} else {
|
} else {
|
||||||
if let Some(Token::Identifier(ident)) = stream.next() {
|
if let Some(Token::Identifier(ident)) = stream.next() {
|
||||||
match &*ident {
|
match &*ident {
|
||||||
|
@ -293,6 +293,9 @@ impl From<ast::TypeKind> for mir::TypeKind {
|
|||||||
ast::TypeKind::Borrow(type_kind, mutable) => {
|
ast::TypeKind::Borrow(type_kind, mutable) => {
|
||||||
mir::TypeKind::Borrow(Box::new(mir::TypeKind::from(*type_kind.clone())), *mutable)
|
mir::TypeKind::Borrow(Box::new(mir::TypeKind::from(*type_kind.clone())), *mutable)
|
||||||
}
|
}
|
||||||
|
ast::TypeKind::Ptr(type_kind) => {
|
||||||
|
mir::TypeKind::Ptr(Box::new(mir::TypeKind::from(*type_kind.clone())))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
10
reid_src/ptr.reid
Normal file
10
reid_src/ptr.reid
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// Arithmetic, function calls and imports!
|
||||||
|
|
||||||
|
|
||||||
|
extern fn malloc(size: u64) -> *u8;
|
||||||
|
|
||||||
|
fn main() -> u16 {
|
||||||
|
let ptr = malloc(4);
|
||||||
|
|
||||||
|
return ptr[0];
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user