From 07aefb57ec82a5772643b51f4fdabb82ce25c992 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Sun, 29 Aug 2021 12:45:02 +0200 Subject: [PATCH] #2511 --- Compiler/PCU/PCUReader.cs | 7 +++++-- TestSuite/units/u_implicitexplicit2.pas | 15 +++++++++++++++ TestSuite/usesunits/use_implicitexplicit2.pas | 4 ++++ 3 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 TestSuite/units/u_implicitexplicit2.pas create mode 100644 TestSuite/usesunits/use_implicitexplicit2.pas diff --git a/Compiler/PCU/PCUReader.cs b/Compiler/PCU/PCUReader.cs index 4a99a7f26..92372635e 100644 --- a/Compiler/PCU/PCUReader.cs +++ b/Compiler/PCU/PCUReader.cs @@ -1345,7 +1345,10 @@ namespace PascalABCCompiler.PCU // parameters.Add(GetTypeReference()); //} List parameters = GetTypesList(); - return compn.get_instance(parameters) as generic_instance_type_node; + int tmp = (int)br.BaseStream.Position; + generic_instance_type_node tn = compn.get_instance(parameters) as generic_instance_type_node; + br.BaseStream.Seek(tmp, SeekOrigin.Begin); + return tn; } private generic_namespace_function_instance_node GetGenericNamespaceFunctionReference() @@ -3040,7 +3043,7 @@ namespace PascalABCCompiler.PCU int offset = (int)br.BaseStream.Position-start_pos; br.ReadByte(); string s = br.ReadString(); - type_node tn = GetTypeReference(); + type_node tn = GetTypeReference(); concrete_parameter_type cpt = (concrete_parameter_type)br.ReadByte(); SemanticTree.parameter_type pt = SemanticTree.parameter_type.value; switch (cpt) diff --git a/TestSuite/units/u_implicitexplicit2.pas b/TestSuite/units/u_implicitexplicit2.pas new file mode 100644 index 000000000..1881a015f --- /dev/null +++ b/TestSuite/units/u_implicitexplicit2.pas @@ -0,0 +1,15 @@ +unit u_implicitexplicit2; + +type + + t0 = class + // Обязательно operator= или operator<> + static function operator=(a, b: t0) := false; + end; + + t1 = class + // Обязательно operator implicit + static function operator implicit(a: t0): t1 := nil; + end; + +end. \ No newline at end of file diff --git a/TestSuite/usesunits/use_implicitexplicit2.pas b/TestSuite/usesunits/use_implicitexplicit2.pas new file mode 100644 index 000000000..2adfb455c --- /dev/null +++ b/TestSuite/usesunits/use_implicitexplicit2.pas @@ -0,0 +1,4 @@ +uses u_implicitexplicit2; +begin +assert(default(t1) = nil); +end. \ No newline at end of file