explicitly set is_class

This commit is contained in:
Sun Serega 2022-03-26 12:44:31 +02:00
parent 64f3ccd6c9
commit a89fa4fe7b
4 changed files with 25 additions and 6 deletions

19
TestSuite/where-array.pas Normal file
View file

@ -0,0 +1,19 @@
type
r1 = record end;
t1<T> = class
where T: System.Array;
end;
procedure p1<T>; where T: System.Array;
begin end;
begin
p1&<array of byte>;
p1&<array of r1>;
new t1<array of byte>;
new t1<array of r1>;
end.

View file

@ -1411,6 +1411,7 @@ namespace PascalABCCompiler.TreeConverter
scope,def_loc);
(scope as SymbolTable.ClassScope).class_type = tctn; // SSM 02.04.19 - каждый Scope пользовательского класса хранит свой type_node
tctn.is_class = true;
tctn.IsPartial = is_partial;
if (partial_class != null)
{
@ -1438,6 +1439,7 @@ namespace PascalABCCompiler.TreeConverter
scope, def_loc);
_cmn.scope.AddSymbol(name, new SymbolInfo(tctn));
tctn.IsInterface = false;
tctn.is_class = true;
_cmn.types.AddElement(tctn);
_ctn = tctn;
SystemLibrary.SystemLibrary.init_reference_type(tctn);

View file

@ -1995,11 +1995,6 @@ namespace PascalABCCompiler.TreeConverter
return find_eq_return_value_method_in_list(fn, funcs);
}
public void init_reference_type(type_node ctn)
{
SystemLibrary.SystemLibrary.init_reference_type(ctn);
}
/// <summary>
/// Получение compiled_type_node из либо compiled_type_node либо compiled_generic_instance_type_node. Используется ниже локально
/// </summary>

View file

@ -89,6 +89,7 @@ namespace PascalABCCompiler.TreeConverter
compiler_string_consts.get_array_type_name(element_type.name,rank), SemanticTree.type_access_level.tal_public,
cmn, convertion_data_and_alghoritms.symbol_table.CreateClassScope(top_scope,SystemLibrary.SystemLibrary.array_base_type.Scope), loc);
comtn.internal_type_special_kind = SemanticTree.type_special_kind.array_kind;
comtn.is_class = true;
comtn.add_internal_interface(aii);
if (!types_unsized_arrays.TryGetValue(element_type,out ret))
{
@ -250,7 +251,8 @@ namespace PascalABCCompiler.TreeConverter
SemanticTree.type_access_level.tal_public, cmn,
convertion_data_and_alghoritms.symbol_table.CreateClassScope(top_scope, SystemLibrary.SystemLibrary.delegate_base_type.Scope, "delegate " + name),
loc);
ctn.IsDelegate = true;
ctn.IsDelegate = true;
ctn.is_class = true;
return ctn;
}
@ -412,6 +414,7 @@ namespace PascalABCCompiler.TreeConverter
common_type_node ctn = new common_type_node(null, name, SemanticTree.type_access_level.tal_public,
_cmn, convertion_data_and_alghoritms.symbol_table.CreateClassScope(top_scope, null, "array_type " + name), loc);
ctn.is_class = true;
ctn.SetBaseType(SystemLibrary.SystemLibrary.object_type);
//DarkStar Add
//loc не нужно мне это! и некому не нужно!