float literals

This commit is contained in:
2026-06-24 18:06:58 +02:00
parent 213e3d4b37
commit e4582ec85a
6 changed files with 62 additions and 21 deletions

View File

@@ -429,6 +429,7 @@ impl<'a> TypeChecker<'a> {
ExprKind::Grouping(expr) => self.typecheck_expr(env, expr),
ExprKind::Literal(token) => match token.token_type {
TokenType::IntLiteral => Ok("i64".into()),
TokenType::FloatLiteral => Ok("f64".into()),
TokenType::CharLiteral => Ok("u8".into()),
TokenType::StringLiteral => Ok("str".into()),
TokenType::True => Ok("bool".into()),
@@ -439,8 +440,8 @@ impl<'a> TypeChecker<'a> {
let right_type = self.typecheck_expr(env, right)?;
match op.token_type {
TokenType::Minus => {
expect_type!(right_type, "i64", op.loc);
Ok("i64".into())
expect_types!(right_type, ["f64", "i64"], op.loc);
Ok(right_type)
}
TokenType::Bang => {
expect_types!(right_type, ["bool", "i64", "ptr", "u8"], op.loc);