@@ -33,14 +33,9 @@ private struct Word {
3333 string symbolName;
3434}
3535
36- private struct Constant {
37- Node value;
38- }
39-
4036class 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
0 commit comments