From 438be14bd2e548827952fbeddc2504013e3e2690 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Sun, 7 Feb 2021 12:36:52 +0100 Subject: [PATCH] #2432 --- Compiler/PCU/PCUWriter.cs | 6 +++++- TestSuite/units/u_partial1.pas | 19 +++++++++++++++++++ TestSuite/usesunits/use_partial1.pas | 4 ++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 TestSuite/units/u_partial1.pas create mode 100644 TestSuite/usesunits/use_partial1.pas diff --git a/Compiler/PCU/PCUWriter.cs b/Compiler/PCU/PCUWriter.cs index cabef4245..b750437dc 100644 --- a/Compiler/PCU/PCUWriter.cs +++ b/Compiler/PCU/PCUWriter.cs @@ -1430,7 +1430,9 @@ namespace PascalABCCompiler.PCU private void WriteTypeReferenceWithDelay(common_type_node type) { - type_references.Add((int)bw.BaseStream.Position, type); + if (!type_references.ContainsKey((int)bw.BaseStream.Position)) + type_references.Add((int)bw.BaseStream.Position, type); + bw.Write((byte)0); bw.Write(0); } @@ -2502,6 +2504,8 @@ namespace PascalABCCompiler.PCU private void VisitTypeDefinition(common_type_node type) { int offset = 0; + if (class_info.ContainsKey(type)) + return; if (is_interface == true) offset = SavePositionAndConstPool(type); else offset = SavePositionAndImplementationPool(type); bw.Write((byte)type.semantic_node_type); diff --git a/TestSuite/units/u_partial1.pas b/TestSuite/units/u_partial1.pas new file mode 100644 index 000000000..68c9968d3 --- /dev/null +++ b/TestSuite/units/u_partial1.pas @@ -0,0 +1,19 @@ +unit u_partial1; + +interface + +type + t0 = class end; + t1 = partial class(t0) + + end; + + +implementation + +type + t1 = partial class(t0) + + end; + +end. \ No newline at end of file diff --git a/TestSuite/usesunits/use_partial1.pas b/TestSuite/usesunits/use_partial1.pas new file mode 100644 index 000000000..ceda0d285 --- /dev/null +++ b/TestSuite/usesunits/use_partial1.pas @@ -0,0 +1,4 @@ +uses u_partial1; +begin + var o:t1 := new t1; +end. \ No newline at end of file