From ad20fefabcf1a0384a7603d1bcf8d2074f878068 Mon Sep 17 00:00:00 2001 From: sofia Date: Sun, 13 Jul 2025 18:37:18 +0300 Subject: [PATCH] Add Array Expression to MIR --- reid/src/codegen.rs | 1 + reid/src/mir/display.rs | 12 ++++++++++++ reid/src/mir/mod.rs | 1 + reid/src/mir/typecheck.rs | 1 + reid/src/mir/typeinference.rs | 1 + reid/src/mir/types.rs | 1 + 6 files changed, 17 insertions(+) diff --git a/reid/src/codegen.rs b/reid/src/codegen.rs index 5115cbb..abd599e 100644 --- a/reid/src/codegen.rs +++ b/reid/src/codegen.rs @@ -334,6 +334,7 @@ impl mir::Expression { } } mir::ExprKind::Index(expression, _) => todo!("codegen for index expression"), + mir::ExprKind::Array(expressions) => todo!("codegen for array expression"), } } } diff --git a/reid/src/mir/display.rs b/reid/src/mir/display.rs index 78f0c07..8b503a6 100644 --- a/reid/src/mir/display.rs +++ b/reid/src/mir/display.rs @@ -132,6 +132,18 @@ impl Display for ExprKind { Display::fmt(&expression, f)?; write_index(f, *idx) } + ExprKind::Array(expressions) => { + f.write_char('[')?; + let mut iter = expressions.iter(); + if let Some(item) = iter.next() { + Display::fmt(item, f); + while let Some(item) = iter.next() { + f.write_str(", ")?; + Display::fmt(item, f)?; + } + } + f.write_char(']') + } } } } diff --git a/reid/src/mir/mod.rs b/reid/src/mir/mod.rs index fb9f3c4..5fd4aa4 100644 --- a/reid/src/mir/mod.rs +++ b/reid/src/mir/mod.rs @@ -209,6 +209,7 @@ pub struct Import(pub String, pub Metadata); pub enum ExprKind { Variable(NamedVariableRef), Index(Box, u64), + Array(Vec), Literal(Literal), BinOp(BinaryOperator, Box, Box), FunctionCall(FunctionCall), diff --git a/reid/src/mir/typecheck.rs b/reid/src/mir/typecheck.rs index 004ba5d..72e4e99 100644 --- a/reid/src/mir/typecheck.rs +++ b/reid/src/mir/typecheck.rs @@ -374,6 +374,7 @@ impl Expression { } ExprKind::Block(block) => block.typecheck(state, &hints, hint_t), ExprKind::Index(expression, _) => todo!("typechecking for index expression"), + ExprKind::Array(expressions) => todo!("typechecking for array expression"), } } } diff --git a/reid/src/mir/typeinference.rs b/reid/src/mir/typeinference.rs index cee6bfa..4b5c8e3 100644 --- a/reid/src/mir/typeinference.rs +++ b/reid/src/mir/typeinference.rs @@ -261,6 +261,7 @@ impl Expression { } } ExprKind::Index(expression, _) => todo!("type inference for index expression"), + ExprKind::Array(expressions) => todo!("type inference for array expression"), } } } diff --git a/reid/src/mir/types.rs b/reid/src/mir/types.rs index b01082f..74766c8 100644 --- a/reid/src/mir/types.rs +++ b/reid/src/mir/types.rs @@ -87,6 +87,7 @@ impl ReturnType for Expression { FunctionCall(fcall) => fcall.return_type(), If(expr) => expr.return_type(), Index(expression, _) => todo!("return type for index"), + Array(expressions) => todo!("return type for array expression"), } } }