bug fix #1062
This commit is contained in:
parent
acb41033ad
commit
b64b861925
|
|
@ -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
41
TestSuite/abstract3.pas
Normal 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.
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue