Skip to content

Commit 96ec5a8

Browse files
committed
refactor (7.2k to 6.8k loc)
1 parent 5a11635 commit 96ec5a8

File tree

6 files changed

+140
-646
lines changed

6 files changed

+140
-646
lines changed

source/backends/arm64.d

Lines changed: 0 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,9 @@ private struct Word {
3333
string symbolName;
3434
}
3535

36-
private struct Constant {
37-
Node value;
38-
}
39-
4036
class BackendARM64 : CompilerBackend {
4137
Word[string] words;
4238
string thisFunc;
43-
Constant[string] consts;
4439
bool inScope;
4540
uint blockCounter;
4641
bool inWhile;
@@ -867,57 +862,6 @@ class BackendARM64 : CompilerBackend {
867862
CompileArray(arrayNode);
868863
}
869864

870-
override void CompileStruct(StructNode node) {
871-
size_t offset;
872-
873-
if (TypeExists(node.name)) {
874-
Error(node.error, "Type '%s' defined multiple times", node.name);
875-
}
876-
877-
StructEntry[] entries;
878-
string[] members;
879-
880-
if (node.inherits) {
881-
if (!TypeExists(node.inheritsFrom)) {
882-
Error(node.error, "Type '%s' doesn't exist", node.inheritsFrom);
883-
}
884-
885-
if (!GetType(node.inheritsFrom).isStruct) {
886-
Error(node.error, "Type '%s' is not a structure", node.inheritsFrom);
887-
}
888-
889-
entries = GetType(node.inheritsFrom).structure;
890-
891-
foreach (ref member ; GetType(node.inheritsFrom).structure) {
892-
members ~= member.name;
893-
}
894-
}
895-
896-
foreach (ref member ; node.members) {
897-
if (!TypeExists(member.type)) {
898-
Error(node.error, "Type '%s' doesn't exist", member.type);
899-
}
900-
if (members.canFind(member.name)) {
901-
Error(node.error, "Duplicate member '%s'", member.name);
902-
}
903-
904-
auto newMember = StructEntry(
905-
GetType(member.type), member.name, member.array, member.size, offset
906-
);
907-
entries ~= newMember;
908-
members ~= member.name;
909-
910-
offset += newMember.array? newMember.type.size * newMember.size : newMember.type.size;
911-
}
912-
913-
foreach (ref member ; entries) {
914-
NewConst(format("%s.%s", node.name, member.name), member.offset);
915-
}
916-
917-
NewConst(format("%s.sizeof", node.name), offset);
918-
types ~= Type(node.name, offset, true, entries);
919-
}
920-
921865
override void CompileReturn(WordNode node) {
922866
if (!inScope) {
923867
Error(node.error, "Return used outside of function");
@@ -941,35 +885,6 @@ class BackendARM64 : CompilerBackend {
941885
output ~= "ret\n";
942886
}
943887

944-
override void CompileConst(ConstNode node) {
945-
if (node.name in consts) {
946-
Error(node.error, "Constant '%s' already defined", node.name);
947-
}
948-
949-
NewConst(node.name, node.value);
950-
}
951-
952-
override void CompileEnum(EnumNode node) {
953-
if (!TypeExists(node.enumType)) {
954-
Error(node.error, "Enum base type '%s' doesn't exist", node.enumType);
955-
}
956-
if (TypeExists(node.name)) {
957-
Error(node.error, "Enum name is already used by type '%s'", node.enumType);
958-
}
959-
960-
auto baseType = GetType(node.enumType);
961-
baseType.name = node.name;
962-
types ~= baseType;
963-
964-
foreach (i, ref name ; node.names) {
965-
NewConst(format("%s.%s", node.name, name), node.values[i]);
966-
}
967-
968-
NewConst(format("%s.min", node.name), node.values.minElement());
969-
NewConst(format("%s.max", node.name), node.values.maxElement());
970-
NewConst(format("%s.sizeof", node.name), GetType(node.name).size);
971-
}
972-
973888
override void CompileBreak(WordNode node) {
974889
if (!inWhile) {
975890
Error(node.error, "Not in while loop");
@@ -986,49 +901,6 @@ class BackendARM64 : CompilerBackend {
986901
output ~= format("b __while_%d_next\n", currentLoop);
987902
}
988903

989-
override void CompileUnion(UnionNode node) {
990-
size_t maxSize = 0;
991-
992-
if (TypeExists(node.name)) {
993-
Error(node.error, "Type '%s' already exists", node.name);
994-
}
995-
996-
string[] unionTypes;
997-
998-
foreach (ref type ; node.types) {
999-
if (unionTypes.canFind(type)) {
1000-
Error(node.error, "Union type '%s' defined twice", type);
1001-
}
1002-
unionTypes ~= type;
1003-
1004-
if (!TypeExists(type)) {
1005-
Error(node.error, "Type '%s' doesn't exist", type);
1006-
}
1007-
1008-
if (GetType(type).size > maxSize) {
1009-
maxSize = GetType(type).size;
1010-
}
1011-
}
1012-
1013-
types ~= Type(node.name, maxSize);
1014-
NewConst(format("%s.sizeof", node.name), cast(long) maxSize);
1015-
}
1016-
1017-
override void CompileAlias(AliasNode node) {
1018-
if (!TypeExists(node.from)) {
1019-
Error(node.error, "Type '%s' doesn't exist", node.from);
1020-
}
1021-
if ((TypeExists(node.to)) && !node.overwrite) {
1022-
Error(node.error, "Type '%s' already defined", node.to);
1023-
}
1024-
1025-
auto baseType = GetType(node.from);
1026-
baseType.name = node.to;
1027-
types ~= baseType;
1028-
1029-
NewConst(format("%s.sizeof", node.to), cast(long) GetType(node.to).size);
1030-
}
1031-
1032904
override void CompileExtern(ExternNode node) {
1033905
Word word;
1034906

source/backends/lua.d

Lines changed: 0 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ private struct Word {
3737
class BackendLua : CompilerBackend {
3838
Word[string] words;
3939
string thisFunc;
40-
Constant[string] consts;
4140
bool inScope;
4241
uint blockCounter;
4342
bool inWhile;
@@ -633,55 +632,6 @@ class BackendLua : CompilerBackend {
633632
CompileArray(arrayNode);
634633
}
635634

636-
override void CompileStruct(StructNode node) {
637-
size_t offset;
638-
639-
if (TypeExists(node.name)) {
640-
Error(node.error, "Type '%s' defined multiple times", node.name);
641-
}
642-
643-
StructEntry[] entries;
644-
string[] members;
645-
646-
if (node.inherits) {
647-
if (!TypeExists(node.inheritsFrom)) {
648-
Error(node.error, "Type '%s' doesn't exist", node.inheritsFrom);
649-
}
650-
651-
if (!GetType(node.inheritsFrom).isStruct) {
652-
Error(node.error, "Type '%s' is not a structure", node.inheritsFrom);
653-
}
654-
655-
entries = GetType(node.inheritsFrom).structure;
656-
657-
foreach (ref member ; GetType(node.inheritsFrom).structure) {
658-
members ~= member.name;
659-
}
660-
}
661-
662-
foreach (ref member ; node.members) {
663-
if (!TypeExists(member.type)) {
664-
Error(node.error, "Type '%s' doesn't exist", member.type);
665-
}
666-
if (members.canFind(member.name)) {
667-
Error(node.error, "Duplicate member '%s'", member.name);
668-
}
669-
670-
entries ~= StructEntry(
671-
GetType(member.type), member.name, member.array, member.size
672-
);
673-
members ~= member.name;
674-
}
675-
676-
foreach (ref member ; entries) {
677-
NewConst(format("%s.%s", node.name, member.name), offset);
678-
offset += member.array? member.type.size * member.size : member.type.size;
679-
}
680-
681-
NewConst(format("%s.sizeof", node.name), offset);
682-
types ~= Type(node.name, offset, true, entries);
683-
}
684-
685635
override void CompileReturn(WordNode node) {
686636
if (!inScope) {
687637
Error(node.error, "Return used outside of function");
@@ -702,35 +652,6 @@ class BackendLua : CompilerBackend {
702652
output ~= "do return end\n";
703653
}
704654

705-
override void CompileConst(ConstNode node) {
706-
if (node.name in consts) {
707-
Error(node.error, "Constant '%s' already defined", node.name);
708-
}
709-
710-
NewConst(node.name, node.value);
711-
}
712-
713-
override void CompileEnum(EnumNode node) {
714-
if (!TypeExists(node.enumType)) {
715-
Error(node.error, "Enum base type '%s' doesn't exist", node.enumType);
716-
}
717-
if (TypeExists(node.name)) {
718-
Error(node.error, "Enum name is already used by type '%s'", node.enumType);
719-
}
720-
721-
auto baseType = GetType(node.enumType);
722-
baseType.name = node.name;
723-
types ~= baseType;
724-
725-
foreach (i, ref name ; node.names) {
726-
NewConst(format("%s.%s", node.name, name), node.values[i]);
727-
}
728-
729-
NewConst(format("%s.min", node.name), node.values.minElement());
730-
NewConst(format("%s.max", node.name), node.values.maxElement());
731-
NewConst(format("%s.sizeof", node.name), GetType(node.name).size);
732-
}
733-
734655
override void CompileBreak(WordNode node) {
735656
if (!inWhile) {
736657
Error(node.error, "Not in while loop");
@@ -747,49 +668,6 @@ class BackendLua : CompilerBackend {
747668
output ~= format("goto ::while_%d_next::\n", currentLoop);
748669
}
749670

750-
override void CompileUnion(UnionNode node) {
751-
size_t maxSize = 0;
752-
753-
if (TypeExists(node.name)) {
754-
Error(node.error, "Type '%s' already exists", node.name);
755-
}
756-
757-
string[] unionTypes;
758-
759-
foreach (ref type ; node.types) {
760-
if (unionTypes.canFind(type)) {
761-
Error(node.error, "Union type '%s' defined twice", type);
762-
}
763-
unionTypes ~= type;
764-
765-
if (!TypeExists(type)) {
766-
Error(node.error, "Type '%s' doesn't exist", type);
767-
}
768-
769-
if (GetType(type).size > maxSize) {
770-
maxSize = GetType(type).size;
771-
}
772-
}
773-
774-
types ~= Type(node.name, maxSize);
775-
NewConst(format("%s.sizeof", node.name), cast(long) maxSize);
776-
}
777-
778-
override void CompileAlias(AliasNode node) {
779-
if (!TypeExists(node.from)) {
780-
Error(node.error, "Type '%s' doesn't exist", node.from);
781-
}
782-
if ((TypeExists(node.to)) && !node.overwrite) {
783-
Error(node.error, "Type '%s' already defined", node.to);
784-
}
785-
786-
auto baseType = GetType(node.from);
787-
baseType.name = node.to;
788-
types ~= baseType;
789-
790-
NewConst(format("%s.sizeof", node.to), cast(long) GetType(node.to).size);
791-
}
792-
793671
override void CompileExtern(ExternNode node) {
794672
Word word;
795673

0 commit comments

Comments
 (0)