...
This commit is contained in:
@@ -1,18 +1,29 @@
|
|||||||
// c
|
// c
|
||||||
extern func puts(text: cstring)
|
extern func puts(text: cstring)
|
||||||
|
|
||||||
|
struct Name
|
||||||
|
{
|
||||||
|
first: cstring
|
||||||
|
last: cstring
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Human
|
||||||
|
{
|
||||||
|
name: Name
|
||||||
|
age: cstring
|
||||||
|
}
|
||||||
|
|
||||||
func main(args: []cstring): i64
|
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(x.name.last)
|
||||||
{
|
|
||||||
puts("yes")
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
puts("no")
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1074,7 +1074,15 @@ public class QBEGenerator
|
|||||||
|
|
||||||
private string EmitStructFieldAccess(StructFieldAccessNode structFieldAccess)
|
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)
|
private string EmitStructFuncCall(StructFuncCallNode structFuncCall)
|
||||||
|
|||||||
Reference in New Issue
Block a user