parent
83fe37023b
commit
141ef13daa
14
TestSuite/errors/err0392.pas
Normal file
14
TestSuite/errors/err0392.pas
Normal 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
21
TestSuite/where14.pas
Normal 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.
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue