bug fix #420
This commit is contained in:
parent
c9a057ec58
commit
c71e1f19cb
9
TestSuite/where2.pas
Normal file
9
TestSuite/where2.pas
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
function DQNToNullable2<T> (ff: System.Nullable<T>; v: T): System.Nullable<T>; where T: record;
|
||||||
|
begin
|
||||||
|
Result := new System.Nullable<T>(v);
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
var v := DQNToNullable2(2,2);
|
||||||
|
assert(v.Value = 2);
|
||||||
|
end.
|
||||||
16
TestSuite/where3.pas
Normal file
16
TestSuite/where3.pas
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
function Test<T>(a: T): T; where T:constructor;
|
||||||
|
begin
|
||||||
|
Result := new T;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function Test2<T>(a: T): T; where T:record;
|
||||||
|
begin
|
||||||
|
Result := a;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
var obj := Test(new StringBuilder);
|
||||||
|
assert(obj.Length = 0);
|
||||||
|
assert(Test(new StringBuilder).Length = 0);
|
||||||
|
assert(Test2(2) = 2);
|
||||||
|
end.
|
||||||
|
|
@ -11833,6 +11833,10 @@ namespace PascalABCCompiler.TreeConverter
|
||||||
{
|
{
|
||||||
visit_generic_params(context.top_function, _function_header.template_args.idents);
|
visit_generic_params(context.top_function, _function_header.template_args.idents);
|
||||||
}
|
}
|
||||||
|
if (_function_header.where_defs != null)
|
||||||
|
{
|
||||||
|
visit_where_list(_function_header.where_defs);
|
||||||
|
}
|
||||||
SymbolInfoUnit si = context.create_special_names();
|
SymbolInfoUnit si = context.create_special_names();
|
||||||
weak_node_test_and_visit(_function_header.parameters);
|
weak_node_test_and_visit(_function_header.parameters);
|
||||||
type_node tn = null;
|
type_node tn = null;
|
||||||
|
|
@ -12012,11 +12016,7 @@ namespace PascalABCCompiler.TreeConverter
|
||||||
AddError(get_location(_function_header), "FUNCTION_NEED_RETURN_TYPE");
|
AddError(get_location(_function_header), "FUNCTION_NEED_RETURN_TYPE");
|
||||||
if (_function_header.where_defs != null)
|
if (_function_header.where_defs != null)
|
||||||
{
|
{
|
||||||
if (unique)
|
if (!unique)
|
||||||
{
|
|
||||||
visit_where_list(_function_header.where_defs);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
AddError(get_location(_function_header.where_defs), "WHERE_SECTION_MUST_BE_ONLY_IN_FIRST_DECLARATION");
|
AddError(get_location(_function_header.where_defs), "WHERE_SECTION_MUST_BE_ONLY_IN_FIRST_DECLARATION");
|
||||||
}
|
}
|
||||||
|
|
@ -12105,6 +12105,10 @@ namespace PascalABCCompiler.TreeConverter
|
||||||
{
|
{
|
||||||
visit_generic_params(context.top_function, _procedure_header.template_args.idents);
|
visit_generic_params(context.top_function, _procedure_header.template_args.idents);
|
||||||
}
|
}
|
||||||
|
if (_procedure_header.where_defs != null)
|
||||||
|
{
|
||||||
|
visit_where_list(_procedure_header.where_defs);
|
||||||
|
}
|
||||||
weak_node_test_and_visit(_procedure_header.parameters);
|
weak_node_test_and_visit(_procedure_header.parameters);
|
||||||
if (_procedure_header.name.class_name != null)
|
if (_procedure_header.name.class_name != null)
|
||||||
with_class_name = true;
|
with_class_name = true;
|
||||||
|
|
@ -12179,11 +12183,7 @@ namespace PascalABCCompiler.TreeConverter
|
||||||
}
|
}
|
||||||
if (_procedure_header.where_defs != null)
|
if (_procedure_header.where_defs != null)
|
||||||
{
|
{
|
||||||
if (unique)
|
if (!unique)
|
||||||
{
|
|
||||||
visit_where_list(_procedure_header.where_defs);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
AddError(get_location(_procedure_header.where_defs), "WHERE_SECTION_MUST_BE_ONLY_IN_FIRST_DECLARATION");
|
AddError(get_location(_procedure_header.where_defs), "WHERE_SECTION_MUST_BE_ONLY_IN_FIRST_DECLARATION");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue