explicitly set is_class
This commit is contained in:
parent
64f3ccd6c9
commit
a89fa4fe7b
19
TestSuite/where-array.pas
Normal file
19
TestSuite/where-array.pas
Normal 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.
|
||||||
|
|
@ -1411,6 +1411,7 @@ namespace PascalABCCompiler.TreeConverter
|
||||||
scope,def_loc);
|
scope,def_loc);
|
||||||
(scope as SymbolTable.ClassScope).class_type = tctn; // SSM 02.04.19 - каждый Scope пользовательского класса хранит свой type_node
|
(scope as SymbolTable.ClassScope).class_type = tctn; // SSM 02.04.19 - каждый Scope пользовательского класса хранит свой type_node
|
||||||
|
|
||||||
|
tctn.is_class = true;
|
||||||
tctn.IsPartial = is_partial;
|
tctn.IsPartial = is_partial;
|
||||||
if (partial_class != null)
|
if (partial_class != null)
|
||||||
{
|
{
|
||||||
|
|
@ -1438,6 +1439,7 @@ namespace PascalABCCompiler.TreeConverter
|
||||||
scope, def_loc);
|
scope, def_loc);
|
||||||
_cmn.scope.AddSymbol(name, new SymbolInfo(tctn));
|
_cmn.scope.AddSymbol(name, new SymbolInfo(tctn));
|
||||||
tctn.IsInterface = false;
|
tctn.IsInterface = false;
|
||||||
|
tctn.is_class = true;
|
||||||
_cmn.types.AddElement(tctn);
|
_cmn.types.AddElement(tctn);
|
||||||
_ctn = tctn;
|
_ctn = tctn;
|
||||||
SystemLibrary.SystemLibrary.init_reference_type(tctn);
|
SystemLibrary.SystemLibrary.init_reference_type(tctn);
|
||||||
|
|
|
||||||
|
|
@ -1995,11 +1995,6 @@ namespace PascalABCCompiler.TreeConverter
|
||||||
return find_eq_return_value_method_in_list(fn, funcs);
|
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>
|
/// <summary>
|
||||||
/// Получение compiled_type_node из либо compiled_type_node либо compiled_generic_instance_type_node. Используется ниже локально
|
/// Получение compiled_type_node из либо compiled_type_node либо compiled_generic_instance_type_node. Используется ниже локально
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
|
|
@ -89,6 +89,7 @@ namespace PascalABCCompiler.TreeConverter
|
||||||
compiler_string_consts.get_array_type_name(element_type.name,rank), SemanticTree.type_access_level.tal_public,
|
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);
|
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.internal_type_special_kind = SemanticTree.type_special_kind.array_kind;
|
||||||
|
comtn.is_class = true;
|
||||||
comtn.add_internal_interface(aii);
|
comtn.add_internal_interface(aii);
|
||||||
if (!types_unsized_arrays.TryGetValue(element_type,out ret))
|
if (!types_unsized_arrays.TryGetValue(element_type,out ret))
|
||||||
{
|
{
|
||||||
|
|
@ -250,7 +251,8 @@ namespace PascalABCCompiler.TreeConverter
|
||||||
SemanticTree.type_access_level.tal_public, cmn,
|
SemanticTree.type_access_level.tal_public, cmn,
|
||||||
convertion_data_and_alghoritms.symbol_table.CreateClassScope(top_scope, SystemLibrary.SystemLibrary.delegate_base_type.Scope, "delegate " + name),
|
convertion_data_and_alghoritms.symbol_table.CreateClassScope(top_scope, SystemLibrary.SystemLibrary.delegate_base_type.Scope, "delegate " + name),
|
||||||
loc);
|
loc);
|
||||||
ctn.IsDelegate = true;
|
ctn.IsDelegate = true;
|
||||||
|
ctn.is_class = true;
|
||||||
return ctn;
|
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,
|
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);
|
_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);
|
ctn.SetBaseType(SystemLibrary.SystemLibrary.object_type);
|
||||||
//DarkStar Add
|
//DarkStar Add
|
||||||
//loc не нужно мне это! и некому не нужно!
|
//loc не нужно мне это! и некому не нужно!
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue