This commit is contained in:
Бондарев Иван 2018-08-21 21:55:37 +02:00
parent acb41033ad
commit b64b861925
3 changed files with 45 additions and 1 deletions

View file

@ -707,6 +707,7 @@ namespace CodeFormatters
|| sn is lock_stmt || sn is loop_stmt || sn is simple_property || sn is read_accessor_name || sn is write_accessor_name
|| sn is formal_parameters || sn is bracket_expr || sn is record_const || sn is array_const || sn is exception_handler
|| sn is try_handler_finally || sn is try_handler_except || sn is external_directive || sn is where_definition
|| sn is match_with
|| (sn is simple_const_definition && in_class && !in_procedure) || (sn is typed_const_definition && in_class && !in_procedure)
)
read_from_beg_pos = true;
@ -2992,6 +2993,7 @@ namespace CodeFormatters
public override void visit(match_with _match_with)
{
sb.Append("match");
SetKeywordOffset("match");
visit_node(_match_with.expr);
IncOffset();
add_space_before = true;

41
TestSuite/abstract3.pas Normal file
View file

@ -0,0 +1,41 @@
var i: integer;
type
t0base=abstract class
procedure p1; abstract;
procedure p2<U>(a: U); abstract;
end;
t0base2<T>=abstract class
procedure p1(a:T); abstract;
end;
t0<T> = class(t0base)
procedure p1; override := exit;
procedure p2<U>(a: U); override := exit;
end;
t1=class(t0<byte>) end;
t2<T> = class(t0base2<T>)
procedure p1(a: T); override;
begin
assert(a = default(T));
i := 3;
end;
end;
t3=class(t2<byte>) end;
begin
var o := new t0<word>;
var o2 := new t1;
var o3 := new t3;
var o4 := new t2<word>;
o3.p1(0);
assert(i = 3);
i := 0;
o4.p1(0);
assert(i = 3);
end.

View file

@ -1583,6 +1583,8 @@ namespace PascalABCCompiler.TreeRealization
cmn.is_constructor = (compiled_orig != null ||
(common_orig != null && common_orig.is_constructor));
cmn.return_value_type = generic_convertions.determine_type(orig_fn.return_value_type, _instance_params, false);
if (common_orig != null)
cmn.overrided_method = common_orig.overrided_method;
if (orig_fn.is_generic_function)
{
cmn.return_value_type = generic_convertions.determine_type(cmn.return_value_type, meth_inst_pars, true);
@ -2233,7 +2235,6 @@ namespace PascalABCCompiler.TreeRealization
this.is_final = original_generic_function.is_final;
this.is_overload = true;
this.polymorphic_state = original_generic_function.polymorphic_state;
this.return_value_type = generic_convertions.determine_type(original_generic_function.return_value_type, instance_parameters, true);
foreach (parameter par in original_generic_function.parameters)