瀏覽代碼

Fixed fingerprint width

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8525 8c9fc860-2736-0410-a75d-ab315db34111
negelef 6 年之前
父節點
當前提交
8466e5744e
共有 3 個文件被更改,包括 8 次插入8 次删除
  1. 5 5
      source/FoxIntermediateBackend.Mod
  2. 2 2
      source/FoxIntermediateCode.Mod
  3. 1 1
      source/FoxSections.Mod

+ 5 - 5
source/FoxIntermediateBackend.Mod

@@ -1457,11 +1457,11 @@ TYPE
 		PROCEDURE GetFingerprintString(symbol: SyntaxTree.Symbol; VAR string: ARRAY OF CHAR);
 		PROCEDURE GetFingerprintString(symbol: SyntaxTree.Symbol; VAR string: ARRAY OF CHAR);
 		VAR
 		VAR
 			fingerprint: SyntaxTree.Fingerprint;
 			fingerprint: SyntaxTree.Fingerprint;
-			fingerprintString: ARRAY 32 OF CHAR;
+			fingerprintString: ARRAY SIZE OF Basic.Fingerprint * 2 + 1 OF CHAR;
 		BEGIN
 		BEGIN
 			fingerprint := fingerprinter.SymbolFP(symbol);
 			fingerprint := fingerprinter.SymbolFP(symbol);
 			string := "[";
 			string := "[";
-			Strings.IntToHexStr(fingerprint.public, 8, fingerprintString);
+			Strings.IntToHexStr(fingerprint.public, SIZE OF Basic.Fingerprint * 2, fingerprintString);
 			Strings.Append(string, fingerprintString);
 			Strings.Append(string, fingerprintString);
 			Strings.Append(string, "]");
 			Strings.Append(string, "]");
 		END GetFingerprintString;
 		END GetFingerprintString;
@@ -6521,7 +6521,7 @@ TYPE
 							(* push fingerprint *)
 							(* push fingerprint *)
 							(* IF dump # NIL THEN dump.String("push fingerprint"); dump.Ln; dump.Update END; *) (* TENTATIVE *)
 							(* IF dump # NIL THEN dump.String("push fingerprint"); dump.Ln; dump.Update END; *) (* TENTATIVE *)
 							fingerprint := fingerprinter.TypeFP(formalParameter.type.resolved);
 							fingerprint := fingerprinter.TypeFP(formalParameter.type.resolved);
-							Emit(Push(position,IntermediateCode.Immediate(IntermediateCode.GetType(system, system.longintType), fingerprint.public))) (* TODO: push the type's fingerprint *)
+							Emit(Push(position,IntermediateCode.Immediate(IntermediateCode.GetType(system, system.hugeintType), fingerprint.public))) (* TODO: push the type's fingerprint *)
 						END
 						END
 					END;
 					END;
 					formalParameter := formalParameter.nextParameter
 					formalParameter := formalParameter.nextParameter
@@ -6885,7 +6885,7 @@ TYPE
 					(* non-pointer to record type: push fingerprint *)
 					(* non-pointer to record type: push fingerprint *)
 					(* IF dump # NIL THEN dump.String("push fingerprint"); dump.Ln; dump.Update END; *) (* TENTATIVE *)
 					(* IF dump # NIL THEN dump.String("push fingerprint"); dump.Ln; dump.Update END; *) (* TENTATIVE *)
 					fingerprint := fingerprinter.TypeFP(type.resolved);
 					fingerprint := fingerprinter.TypeFP(type.resolved);
-					arg := IntermediateCode.Immediate(IntermediateCode.GetType(system, system.longintType), fingerprint.public)
+					arg := IntermediateCode.Immediate(IntermediateCode.GetType(system, system.hugeintType), fingerprint.public)
 				END;
 				END;
 				operatorInitializationCodeSection.Emit(Push(position,arg))
 				operatorInitializationCodeSection.Emit(Push(position,arg))
 			END PushTypeInfo;
 			END PushTypeInfo;
@@ -13016,7 +13016,7 @@ TYPE
 		
 		
 	(*
 	(*
 	ExportDesc* = RECORD
 	ExportDesc* = RECORD
-		fp*: ADDRESS;
+		fp*: HUGEINT;
 		name* {UNTRACED}: DynamicName;
 		name* {UNTRACED}: DynamicName;
 		adr*: ADDRESS;
 		adr*: ADDRESS;
 		exports*: LONGINT;
 		exports*: LONGINT;

+ 2 - 2
source/FoxIntermediateCode.Mod

@@ -630,7 +630,7 @@ TYPE
 					END;
 					END;
 				ELSIF operand.symbol.name # "" THEN
 				ELSIF operand.symbol.name # "" THEN
 					Basic.WriteSegmentedName(w,operand.symbol.name);
 					Basic.WriteSegmentedName(w,operand.symbol.name);
-					IF operand.symbol.fingerprint # 0 THEN w.String("["); w.Hex(operand.symbol.fingerprint,-8); w.String("]"); END;
+					IF operand.symbol.fingerprint # 0 THEN w.String("["); w.Hex(operand.symbol.fingerprint,SIZE OF Basic.Fingerprint * 2); w.String("]"); END;
 					w.String(":"); w.Int(operand.symbolOffset,1);
 					w.String(":"); w.Int(operand.symbolOffset,1);
 					IF operand.offset > 0 THEN w.String("+"); w.Int(operand.offset, 1);
 					IF operand.offset > 0 THEN w.String("+"); w.Int(operand.offset, 1);
 					ELSIF operand.offset < 0 THEN w.String("-"); w.Int(-operand.offset, 1);
 					ELSIF operand.offset < 0 THEN w.String("-"); w.Int(-operand.offset, 1);
@@ -646,7 +646,7 @@ TYPE
 		|ModeImmediate:
 		|ModeImmediate:
 			IF operand.symbol.name # "" THEN
 			IF operand.symbol.name # "" THEN
 				Basic.WriteSegmentedName(w,operand.symbol.name);
 				Basic.WriteSegmentedName(w,operand.symbol.name);
-				IF operand.symbol.fingerprint # 0 THEN w.String("["); w.Hex(operand.symbol.fingerprint,-8); w.String("]"); END;
+				IF operand.symbol.fingerprint # 0 THEN w.String("["); w.Hex(operand.symbol.fingerprint,SIZE OF Basic.Fingerprint * 2); w.String("]"); END;
 				w.String(":"); w.Int(operand.symbolOffset,1);
 				w.String(":"); w.Int(operand.symbolOffset,1);
 				IF operand.offset > 0 THEN w.String("+"); w.Int(operand.offset, 1);
 				IF operand.offset > 0 THEN w.String("+"); w.Int(operand.offset, 1);
 				ELSIF operand.offset < 0 THEN w.String("-"); w.Int(-operand.offset, 1);
 				ELSIF operand.offset < 0 THEN w.String("-"); w.Int(-operand.offset, 1);

+ 1 - 1
source/FoxSections.Mod

@@ -117,7 +117,7 @@ TYPE
 				w.String(" aligned="); w.Int(positionOrAlignment, 0)
 				w.String(" aligned="); w.Int(positionOrAlignment, 0)
 			END;
 			END;
 
 
-			IF fingerprint # 0 THEN w.String(" fingerprint="); w.Hex(fingerprint, -8) END;
+			IF fingerprint # 0 THEN w.String(" fingerprint="); w.Hex(fingerprint, SIZE OF Basic.Fingerprint * 2) END;
 
 
 			IF bitsPerUnit # UnknownSize THEN w.String(" unit="); w.Int(bitsPerUnit, 0) END;
 			IF bitsPerUnit # UnknownSize THEN w.String(" unit="); w.Int(bitsPerUnit, 0) END;