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(
|
type_node btype = determine_type(
|
||||||
original.base_type, param_types, false);
|
original.base_type, param_types, false);
|
||||||
|
if (btype == null)
|
||||||
|
btype = SystemLibrary.SystemLibrary.object_type;
|
||||||
instance.SetBaseTypeIgnoringScope(btype);
|
instance.SetBaseTypeIgnoringScope(btype);
|
||||||
|
|
||||||
//instance._scope = new SymbolTable.GenericTypeInstanceScope(instance, instance.original_generic.Scope, btype.Scope);
|
//instance._scope = new SymbolTable.GenericTypeInstanceScope(instance, instance.original_generic.Scope, btype.Scope);
|
||||||
|
|
|
||||||
|
|
@ -278,7 +278,12 @@ namespace PascalABCCompiler.TreeRealization
|
||||||
}
|
}
|
||||||
if (tn.is_generic_parameter)
|
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)
|
else if (tn is ref_type_node)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue