From 4265bc4ab0e617284fb28a7f23b75a397d7ea81d Mon Sep 17 00:00:00 2001 From: nub31 Date: Tue, 9 Sep 2025 16:44:31 +0200 Subject: [PATCH] ... --- example/src/main.nub | 29 +++++++++++++------ .../NubLang/Generation/QBE/QBEGenerator.cs | 10 ++++++- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/example/src/main.nub b/example/src/main.nub index 94dc2b5..13707b6 100644 --- a/example/src/main.nub +++ b/example/src/main.nub @@ -1,18 +1,29 @@ // c extern func puts(text: cstring) +struct Name +{ + first: cstring + last: cstring +} + +struct Human +{ + name: Name + age: cstring +} + func main(args: []cstring): i64 { - let x: u32 = 23 + let x: Human = struct { + name = struct { + first = "bob" + last = "the builder" + } + age = "23" + } - if x == 11 || false - { - puts("yes") - } - else - { - puts("no") - } + puts(x.name.last) return 0 } diff --git a/src/compiler/NubLang/Generation/QBE/QBEGenerator.cs b/src/compiler/NubLang/Generation/QBE/QBEGenerator.cs index 4d56110..96b56aa 100644 --- a/src/compiler/NubLang/Generation/QBE/QBEGenerator.cs +++ b/src/compiler/NubLang/Generation/QBE/QBEGenerator.cs @@ -1074,7 +1074,15 @@ public class QBEGenerator private string EmitStructFieldAccess(StructFieldAccessNode structFieldAccess) { - return EmitLoad(structFieldAccess.Type, EmitAddressOfStructFieldAccess(structFieldAccess)); + var address = EmitAddressOfStructFieldAccess(structFieldAccess); + + // Inline structs should not be loaded + if (structFieldAccess.Type is StructTypeNode) + { + return address; + } + + return EmitLoad(structFieldAccess.Type, address); } private string EmitStructFuncCall(StructFuncCallNode structFuncCall)