cleanup
This commit is contained in:
parent
1fe1304986
commit
b25cab6a1a
14
TestSuite/errors/err0503_where_enum-class.pas
Normal file
14
TestSuite/errors/err0503_where_enum-class.pas
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
//!Невозможно инстанцировать, так как тип T не является ссылочным (классом)
|
||||
##
|
||||
procedure p0<T>(o: T); where T: class;
|
||||
begin
|
||||
Writeln(o.GetType);
|
||||
end;
|
||||
|
||||
procedure p1<T>(o: T); where T: System.Enum;
|
||||
begin
|
||||
p0(o);
|
||||
end;
|
||||
|
||||
var o: (ME_1, ME_2) := ME_2;
|
||||
p0(o);
|
||||
11
TestSuite/errors/err0504_generic-lock.pas
Normal file
11
TestSuite/errors/err0504_generic-lock.pas
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
//!Выражение должно возвращать ссылочный тип, как того требует оператор lock
|
||||
##
|
||||
procedure p1<T>(o: T);
|
||||
begin
|
||||
lock o do
|
||||
begin
|
||||
Writeln(o);
|
||||
end;
|
||||
end;
|
||||
|
||||
p1(0);
|
||||
13
TestSuite/errors/err0505_where_record-class.pas
Normal file
13
TestSuite/errors/err0505_where_record-class.pas
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
//!Невозможно инстанцировать, так как тип T не является ссылочным (классом)
|
||||
##
|
||||
procedure p0<T>(o: T); where T: class;
|
||||
begin
|
||||
Writeln(o.GetType);
|
||||
end;
|
||||
|
||||
procedure p1<T>(o: T); where T: record;
|
||||
begin
|
||||
p0(o);
|
||||
end;
|
||||
|
||||
p1(0);
|
||||
|
|
@ -20118,7 +20118,7 @@ namespace PascalABCCompiler.TreeConverter
|
|||
//Нужно ли это???
|
||||
if (lock_object.type.semantic_node_type == semantic_node_type.delegated_method)
|
||||
try_convert_typed_expression_to_function_call(ref lock_object);
|
||||
if (lock_object.type == null || lock_object.type.is_value_type)
|
||||
if (/*lock_object.type == null ||*/ !lock_object.type.is_class)
|
||||
AddError(get_location(node.lock_object), "EXPRESSION_IN_LOCK_STATEMENT_RETURNED_NOT_A_REFERENCE_TYPE", lock_object.type);
|
||||
CheckToEmbeddedStatementCannotBeADeclaration(node.stmt);
|
||||
statement_node stmt = convert_strong(node.stmt);
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@ namespace PascalABCCompiler.TreeRealization
|
|||
return new SimpleSemanticError(null, "PARAMETER_{0}_MUST_BE_DERIVED_FROM_{1}", tn.PrintableName, base_type.name);
|
||||
}
|
||||
}
|
||||
if (gpe.is_class && !tn.is_class && !(tn.is_generic_parameter && tn.base_type != null && tn.base_type.is_class))
|
||||
if (gpe.is_class && !tn.is_class)
|
||||
{
|
||||
return new SimpleSemanticError(null, "PARAMETER_{0}_MUST_BE_REFERENCE_TYPE", tn.PrintableName);
|
||||
}
|
||||
|
|
@ -172,10 +172,6 @@ namespace PascalABCCompiler.TreeRealization
|
|||
{
|
||||
return new SimpleSemanticError(null, "PARAMETER_{0}_MUST_BE_VALUE_TYPE", tn.PrintableName);
|
||||
}
|
||||
if (gpe.base_class != null && gpe.base_class != SystemLibrary.SystemLibrary.object_type && tn.is_value && !gpe.base_class.is_value && gpe.base_class != SystemLibrary.SystemLibrary.value_type && gpe.base_class != SystemLibrary.SystemLibrary.enum_base_type)
|
||||
{
|
||||
return new SimpleSemanticError(null, "PARAMETER_{0}_MUST_BE_REFERENCE_TYPE", tn.PrintableName);
|
||||
}
|
||||
foreach (type_node interf in gpe.implementing_interfaces)
|
||||
{
|
||||
type_node di = generic_convertions.determine_type(interf, tparams, method_param_types);
|
||||
|
|
|
|||
Loading…
Reference in a new issue