Browse Source

Do not omit type descriptor when allocating plain pointer types

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8385 8c9fc860-2736-0410-a75d-ab315db34111
negelef 6 years ago
parent
commit
d395d7f414
1 changed files with 14 additions and 15 deletions
  1. 14 15
      source/FoxIntermediateBackend.Mod

+ 14 - 15
source/FoxIntermediateBackend.Mod

@@ -8143,22 +8143,21 @@ TYPE
 						Emit(Result(position, pointer));
 						Emit(Result(position, pointer));
 						exit := NewLabel();
 						exit := NewLabel();
 						BreqL(exit,pointer,nil);
 						BreqL(exit,pointer,nil);
-						IF ~type(SyntaxTree.PointerType).isPlain THEN
-							GetRecordTypeName (recordType,name);
-							IF ~recordType.isObject THEN
-								Basic.SuffixSegmentedName (name, Basic.MakeString ("@Pointer"));
+
+						GetRecordTypeName (recordType,name);
+						IF ~recordType.isObject THEN
+							Basic.SuffixSegmentedName (name, Basic.MakeString ("@Pointer"));
+						END;
+						IntermediateCode.InitAddress(adr, addressType, name , 0, 0);
+						Emit(Mov(position,IntermediateCode.Memory(addressType,pointer,0),adr));
+						IF recordType.isObject THEN
+							IF recordType.IsProtected() THEN
+								DEC (size, MonitorTypeSize * ToMemoryUnits(system,addressType.sizeInBits));
+								Emit(Mov(position,IntermediateCode.Memory(addressType,pointer,MonitorOffset * ToMemoryUnits(system,addressType.sizeInBits)), IntermediateCode.RegisterOffset(addressType,IntermediateCode.GeneralPurposeRegister,pointer.register,size)));
 							END;
 							END;
-							IntermediateCode.InitAddress(adr, addressType, name , 0, 0);
-							Emit(Mov(position,IntermediateCode.Memory(addressType,pointer,0),adr));
-							IF recordType.isObject THEN
-								IF recordType.IsProtected() THEN
-									DEC (size, MonitorTypeSize * ToMemoryUnits(system,addressType.sizeInBits));
-									Emit(Mov(position,IntermediateCode.Memory(addressType,pointer,MonitorOffset * ToMemoryUnits(system,addressType.sizeInBits)), IntermediateCode.RegisterOffset(addressType,IntermediateCode.GeneralPurposeRegister,pointer.register,size)));
-								END;
-								IF recordType.IsActive() THEN
-									DEC (size, ActionTypeSize * ToMemoryUnits(system,addressType.sizeInBits));
-									Emit(Mov(position,IntermediateCode.Memory(addressType,pointer,ActionOffset * ToMemoryUnits(system,addressType.sizeInBits)), IntermediateCode.RegisterOffset(addressType,IntermediateCode.GeneralPurposeRegister,pointer.register,size)));
-								END;
+							IF recordType.IsActive() THEN
+								DEC (size, ActionTypeSize * ToMemoryUnits(system,addressType.sizeInBits));
+								Emit(Mov(position,IntermediateCode.Memory(addressType,pointer,ActionOffset * ToMemoryUnits(system,addressType.sizeInBits)), IntermediateCode.RegisterOffset(addressType,IntermediateCode.GeneralPurposeRegister,pointer.register,size)));
 							END;
 							END;
 						END;
 						END;