Skip to content

Commit fd8559d

Browse files
committed
fix broken Array and Exception (thanks soxfox)
1 parent b693627 commit fd8559d

File tree

6 files changed

+26
-30
lines changed

6 files changed

+26
-30
lines changed

source/backends/arm64.d

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -73,18 +73,18 @@ class BackendARM64 : CompilerBackend {
7373

7474
// built in structs
7575
types ~= Type("Array", 24, true, [
76-
StructEntry(UsedType(GetType("usize"), false), "length"),
77-
StructEntry(UsedType(GetType("usize"), false), "memberSize"),
78-
StructEntry(UsedType(GetType("addr"), false), "elements")
76+
StructEntry(UsedType(GetType("usize"), false), "length", false, 8, 0),
77+
StructEntry(UsedType(GetType("usize"), false), "memberSize", false, 8, 8),
78+
StructEntry(UsedType(GetType("addr"), false), "elements", false, 8, 16)
7979
]);
8080
NewConst("Array.length", 0);
8181
NewConst("Array.memberSize", 8);
8282
NewConst("Array.elements", 16);
8383
NewConst("Array.sizeOf", 8 * 3);
8484

8585
types ~= Type("Exception", 24 + 8, true, [
86-
StructEntry(UsedType(GetType("bool"), false), "error"),
87-
StructEntry(UsedType(GetType("Array"), false), "msg")
86+
StructEntry(UsedType(GetType("bool"), false), "error", false, 8, 0),
87+
StructEntry(UsedType(GetType("Array"), false), "msg", false, 8 * 3, 8)
8888
]);
8989
NewConst("Exception.bool", 0);
9090
NewConst("Exception.msg", 8);
@@ -398,10 +398,6 @@ class BackendARM64 : CompilerBackend {
398398
size = var.type.Size();
399399
}
400400

401-
if (var.type.isStruct && !member) {
402-
Error(node.error, "Can't push value of struct");
403-
}
404-
405401
string base;
406402
if (deref) {
407403
output ~= format("ldr x9, [x20, #%d]\n", var.offset);

source/backends/lua.d

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,18 +58,18 @@ class BackendLua : CompilerBackend {
5858

5959
// built in structs
6060
types ~= Type("Array", 3, true, [
61-
StructEntry(UsedType(GetType("usize"), false), "length"),
62-
StructEntry(UsedType(GetType("usize"), false), "memberSize"),
63-
StructEntry(UsedType(GetType("addr"), false), "elements")
61+
StructEntry(UsedType(GetType("usize"), false), "length", false, 1, 0),
62+
StructEntry(UsedType(GetType("usize"), false), "memberSize", false, 1, 1),
63+
StructEntry(UsedType(GetType("addr"), false), "elements", false, 1, 2)
6464
]);
6565
NewConst("Array.length", 0);
6666
NewConst("Array.memberSize", 1);
6767
NewConst("Array.elements", 2);
6868
NewConst("Array.sizeOf", 3);
6969

7070
types ~= Type("Exception", 3 + 1, true, [
71-
StructEntry(UsedType(GetType("bool"), false), "error"),
72-
StructEntry(UsedType(GetType("Array"), false), "msg")
71+
StructEntry(UsedType(GetType("bool"), false), "error", false, 1, 0),
72+
StructEntry(UsedType(GetType("Array"), false), "msg", false, 3, 1)
7373
]);
7474
NewConst("Exception.bool", 0);
7575
NewConst("Exception.msg", 1);

source/backends/rm86.d

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,18 +48,18 @@ class BackendRM86 : CompilerBackend {
4848

4949
// built in structs
5050
types ~= Type("Array", 6, true, [
51-
StructEntry(UsedType(GetType("usize"), false), "length"),
52-
StructEntry(UsedType(GetType("usize"), false), "memberSize"),
53-
StructEntry(UsedType(GetType("addr"), false), "elements")
51+
StructEntry(UsedType(GetType("usize"), false), "length", false, 2, 0),
52+
StructEntry(UsedType(GetType("usize"), false), "memberSize", false, 2, 2),
53+
StructEntry(UsedType(GetType("addr"), false), "elements", false, 2, 4)
5454
]);
5555
NewConst("Array.length", 0);
5656
NewConst("Array.memberSize", 2);
5757
NewConst("Array.elements", 4);
5858
NewConst("Array.sizeOf", 2 * 3);
5959

6060
types ~= Type("Exception", 6 + 2, true, [
61-
StructEntry(UsedType(GetType("bool"), false), "error"),
62-
StructEntry(UsedType(GetType("Array"), false), "msg")
61+
StructEntry(UsedType(GetType("bool"), false), "error", false, 2, 0),
62+
StructEntry(UsedType(GetType("Array"), false), "msg", false, 6, 2)
6363
]);
6464
NewConst("Exception.bool", 0);
6565
NewConst("Exception.msg", 2);

source/backends/uxn.d

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,18 +42,18 @@ class BackendUXN : CompilerBackend {
4242

4343
// built in structs
4444
types ~= Type("Array", 6, true, [
45-
StructEntry(UsedType(GetType("usize"), false), "length"),
46-
StructEntry(UsedType(GetType("usize"), false), "memberSize"),
47-
StructEntry(UsedType(GetType("addr"), false), "elements")
45+
StructEntry(UsedType(GetType("usize"), false), "length", false, 2, 0),
46+
StructEntry(UsedType(GetType("usize"), false), "memberSize", false, 2, 2),
47+
StructEntry(UsedType(GetType("addr"), false), "elements", false, 2, 4)
4848
]);
4949
NewConst("Array.length", 0);
5050
NewConst("Array.memberSize", 2);
5151
NewConst("Array.elements", 4);
5252
NewConst("Array.sizeOf", 2 * 3);
5353

5454
types ~= Type("Exception", 6 + 2, true, [
55-
StructEntry(UsedType(GetType("bool"), false), "error"),
56-
StructEntry(UsedType(GetType("Array"), false), "msg")
55+
StructEntry(UsedType(GetType("bool"), false), "error", false, 2, 0),
56+
StructEntry(UsedType(GetType("Array"), false), "msg", false, 6, 0)
5757
]);
5858
NewConst("Exception.bool", 0);
5959
NewConst("Exception.msg", 2);

source/backends/x86_64.d

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,18 +75,18 @@ class BackendX86_64 : CompilerBackend {
7575

7676
// built in structs
7777
types ~= Type("Array", 24, true, [
78-
StructEntry(UsedType(GetType("usize"), false), "length"),
79-
StructEntry(UsedType(GetType("usize"), false), "memberSize"),
80-
StructEntry(UsedType(GetType("addr"), false), "elements")
78+
StructEntry(UsedType(GetType("usize"), false), "length", false, 8, 0),
79+
StructEntry(UsedType(GetType("usize"), false), "memberSize", false, 8, 8),
80+
StructEntry(UsedType(GetType("addr"), false), "elements", false, 8, 16)
8181
]);
8282
NewConst("Array.length", 0);
8383
NewConst("Array.memberSize", 8);
8484
NewConst("Array.elements", 16);
8585
NewConst("Array.sizeOf", 8 * 3);
8686

8787
types ~= Type("Exception", 24 + 8, true, [
88-
StructEntry(UsedType(GetType("bool"), false), "error"),
89-
StructEntry(UsedType(GetType("Array"), false), "msg")
88+
StructEntry(UsedType(GetType("bool"), false), "error", false, 8, 0),
89+
StructEntry(UsedType(GetType("Array"), false), "msg", false, 24, 8)
9090
]);
9191
NewConst("Exception.error", 0);
9292
NewConst("Exception.msg", 8);

source/compiler.d

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@ class CompilerBackend {
362362
}
363363

364364
offset += structure[index].offset;
365-
size_t size = structure[index].type.size;
365+
size_t size = structure[index].type.Size();
366366

367367
return StructVariable(size, offset);
368368
}

0 commit comments

Comments
 (0)