Add AST -> MIR for typecasting
This commit is contained in:
parent
c4ab4ac0b3
commit
3378f556ec
@ -256,7 +256,9 @@ impl ast::Expression {
|
||||
Box::new(expr.process(module_id)),
|
||||
),
|
||||
},
|
||||
ast::ExpressionKind::CastTo(expression, _) => todo!(),
|
||||
ast::ExpressionKind::CastTo(expression, ty) => {
|
||||
mir::ExprKind::CastTo(Box::new(expression.process(module_id)), ty.0.clone().into())
|
||||
}
|
||||
};
|
||||
|
||||
mir::Expression(kind, self.1.as_meta(module_id))
|
||||
|
@ -1028,6 +1028,7 @@ impl mir::Expression {
|
||||
}
|
||||
})
|
||||
}
|
||||
mir::ExprKind::CastTo(expression, type_kind) => todo!(),
|
||||
};
|
||||
if let Some(value) = &value {
|
||||
value.instr().maybe_location(&mut scope.block, location);
|
||||
|
@ -211,6 +211,7 @@ impl Display for ExprKind {
|
||||
ExprKind::Borrow(var_ref, false) => write!(f, "&{}", var_ref),
|
||||
ExprKind::Borrow(var_ref, true) => write!(f, "&mut {}", var_ref),
|
||||
ExprKind::Deref(var_ref) => write!(f, "*{}", var_ref),
|
||||
ExprKind::CastTo(expression, type_kind) => write!(f, "{} as {}", expression, type_kind),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -319,6 +319,13 @@ impl Expression {
|
||||
_ => Err(ReturnTypeOther::DerefNonBorrow(var.2)),
|
||||
}
|
||||
}
|
||||
CastTo(expr, type_kind) => match expr.return_type(refs) {
|
||||
Ok(ret_type) => match ret_type {
|
||||
(ReturnKind::Hard, ty) => Ok((ReturnKind::Hard, ty)),
|
||||
_ => Ok((ReturnKind::Soft, type_kind.clone())),
|
||||
},
|
||||
Err(_) => Ok((ReturnKind::Soft, type_kind.clone())),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@ -336,6 +343,7 @@ impl Expression {
|
||||
ExprKind::BinOp(_, _, _) => None,
|
||||
ExprKind::FunctionCall(_) => None,
|
||||
ExprKind::If(_) => None,
|
||||
ExprKind::CastTo(expression, _) => expression.backing_var(),
|
||||
}
|
||||
}
|
||||
|
||||
@ -363,6 +371,7 @@ impl Expression {
|
||||
ExprKind::Block(_) => None,
|
||||
ExprKind::Borrow(_, _) => None,
|
||||
ExprKind::Deref(_) => None,
|
||||
ExprKind::CastTo(expression, _) => expression.num_value(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -254,6 +254,7 @@ pub enum ExprKind {
|
||||
Block(Block),
|
||||
Borrow(NamedVariableRef, bool),
|
||||
Deref(NamedVariableRef),
|
||||
CastTo(Box<Expression>, TypeKind),
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
|
@ -712,6 +712,7 @@ impl Expression {
|
||||
|
||||
Ok(*inner)
|
||||
}
|
||||
ExprKind::CastTo(expression, type_kind) => todo!(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -397,6 +397,7 @@ impl Expression {
|
||||
_ => Err(ErrorKind::AttemptedDerefNonBorrow(var.1.clone())),
|
||||
}
|
||||
}
|
||||
ExprKind::CastTo(expression, type_kind) => todo!(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user