Browse Source

Trace expressions of type size with proper integer type

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8293 8c9fc860-2736-0410-a75d-ab315db34111
negelef 7 năm trước cách đây
mục cha
commit
5cbc39a38f
2 tập tin đã thay đổi với 15 bổ sung1 xóa
  1. 9 1
      source/FoxIntermediateBackend.Mod
  2. 6 0
      source/Trace.Mod

+ 9 - 1
source/FoxIntermediateBackend.Mod

@@ -6639,6 +6639,14 @@ TYPE
 				END;
 			END Address;
 
+			PROCEDURE Size(op: IntermediateCode.Operand);
+			BEGIN
+				IF GetProcedure("Size") THEN
+					Emit(Push(position,op));
+					CallProcedure;
+				END;
+			END Size;
+
 			PROCEDURE StringOperand(op: Operand; type: SyntaxTree.Type);
 			VAR len: IntermediateCode.Operand;
 			BEGIN
@@ -6714,7 +6722,7 @@ TYPE
 						ELSIF expression.type.resolved IS SyntaxTree.AddressType THEN
 							Address(res.op);String("H");
 						ELSIF expression.type.resolved IS SyntaxTree.SizeType THEN
-							Address(res.op);String("H");
+							Size(res.op);
 						ELSIF (expression.type.resolved IS SyntaxTree.PointerType) OR IsPointerToRecord(expression.type,recordType) THEN
 							Address(res.op);String("H");
 						ELSIF (expression.type.resolved IS SyntaxTree.ProcedureType) THEN

+ 6 - 0
source/Trace.Mod

@@ -130,6 +130,12 @@ BEGIN {UNCOOPERATIVE, UNCHECKED}
 	Hex(x,-2*SIZEOF(ADDRESS));
 END Address;
 
+(** Write "x" as a size *)
+PROCEDURE Size* (x: SIZE);
+BEGIN {UNCOOPERATIVE, UNCHECKED}
+	Int(x,0);
+END Size;
+
 (** Write "x" as a hexadecimal number. "w" is the field width. Always prints 16 digits. *)
 PROCEDURE HIntHex* (x: HUGEINT; w: SIZE);
 BEGIN {UNCOOPERATIVE, UNCHECKED} Hex (x, w);