fix #2381
This commit is contained in:
Ivan Bondarev 2021-01-02 13:22:21 +01:00
parent 83fe37023b
commit 141ef13daa
4 changed files with 43 additions and 1 deletions

View file

@ -0,0 +1,14 @@
type
Fixer<TFixer> = class
where TFixer: record;
procedure p1;
begin
var a: TFixer;
var b := a <> nil;
end;
end;
begin end.

21
TestSuite/where14.pas Normal file
View file

@ -0,0 +1,21 @@
type
Fixer<TFixer> = class
where TFixer: Fixer<TFixer>;
procedure p1;
begin
var a: TFixer;
assert(a = nil);
var o := self as object;
end;
end;
DerFixer = class(Fixer<DerFixer>)
end;
begin
var obj := new DerFixer();
obj.p1;
end.

View file

@ -309,6 +309,8 @@ namespace PascalABCCompiler.TreeRealization
//Определяем базовый тип
type_node btype = determine_type(
original.base_type, param_types, false);
if (btype == null)
btype = SystemLibrary.SystemLibrary.object_type;
instance.SetBaseTypeIgnoringScope(btype);
//instance._scope = new SymbolTable.GenericTypeInstanceScope(instance, instance.original_generic.Scope, btype.Scope);

View file

@ -278,7 +278,12 @@ namespace PascalABCCompiler.TreeRealization
}
if (tn.is_generic_parameter)
{
return (tn.is_class || tn.base_type != SystemLibrary.SystemLibrary.object_type && tn.base_type.is_class);
if (tn.is_class)
return true;
if (tn.base_type.is_value || tn.is_value_type)
return false;
return true;
//return (tn.is_class || tn.base_type != SystemLibrary.SystemLibrary.object_type && tn.base_type.is_class);
}
else if (tn is ref_type_node)
{