From 5855a6cb5bb6f1fc0f2d381d8e2229f9c7be588a Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Thu, 23 Apr 2026 19:10:52 +0200 Subject: [PATCH] AST struct call --- parser/src/ast.rs | 1 + src/codegen.rs | 8 ++++++++ test/src/main.mist | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/parser/src/ast.rs b/parser/src/ast.rs index 3c0f3d1..61e2152 100644 --- a/parser/src/ast.rs +++ b/parser/src/ast.rs @@ -50,6 +50,7 @@ pub enum TopLevel { pub enum Postfix { FieldAccess(String), Call(Vec), + StructCall(HashMap), Index(Expression), Binary(BinaryOp, Expression), } diff --git a/src/codegen.rs b/src/codegen.rs index 42c462e..7e3bb54 100644 --- a/src/codegen.rs +++ b/src/codegen.rs @@ -271,6 +271,14 @@ impl GoCodegen { .join(", "); format!("{}({})", result, args_str) } + Postfix::StructCall(fields) => { + let args_str = fields + .iter() + .map(|(a, b)| format!("{a}: {}", self.generate_expression(b))) + .collect::>() + .join(", "); + format!("{}{{{}}}", result, args_str) + } Postfix::Index(idx) => format!("{}[{}]", result, self.generate_expression(idx)), Postfix::Binary(op, rhs) => { let op_str = match op { diff --git a/test/src/main.mist b/test/src/main.mist index 2c08dfc..e217fc6 100644 --- a/test/src/main.mist +++ b/test/src/main.mist @@ -6,6 +6,6 @@ public struct Idk { } int test(int a, int b) { - Idk bro = 10; + Idk bro = Idk { a: 10, b: 10 }; return a + b + bro.a; }