bug fix #1211
This commit is contained in:
parent
b765e1ad63
commit
932600b1c6
|
|
@ -8537,6 +8537,7 @@ namespace PascalABCCompiler.NETGenerator
|
|||
real_parameters[1].visit(this);
|
||||
il.Emit(OpCodes.Call, mi_right);
|
||||
EmitOperator(value);
|
||||
is_dot_expr = tmp_dot;
|
||||
if (tmp_dot)
|
||||
{
|
||||
is_dot_expr = tmp_dot;
|
||||
|
|
|
|||
19
TestSuite/delegates11.pas
Normal file
19
TestSuite/delegates11.pas
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
var i: integer;
|
||||
|
||||
procedure p;
|
||||
begin
|
||||
i := 1;
|
||||
end;
|
||||
type
|
||||
I1 = interface
|
||||
function f1: Action0;
|
||||
end;
|
||||
t1 = class(I1)
|
||||
public function f1: Action0 := p;
|
||||
end;
|
||||
|
||||
begin
|
||||
var t := new t1;
|
||||
t.f1()();
|
||||
assert(i = 1);
|
||||
end.
|
||||
9
TestSuite/errors/err0284.pas
Normal file
9
TestSuite/errors/err0284.pas
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
type
|
||||
I1 = interface
|
||||
function f1: Action0;
|
||||
end;
|
||||
t1 = class(I1)
|
||||
public function f1: procedure := nil;
|
||||
end;
|
||||
|
||||
begin end.
|
||||
9
TestSuite/errors/err0285.pas
Normal file
9
TestSuite/errors/err0285.pas
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
type
|
||||
base = class
|
||||
function f1: Action0; abstract;
|
||||
end;
|
||||
t1 = class(base)
|
||||
public function f1: procedure; override := nil;
|
||||
end;
|
||||
|
||||
begin end.
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
function f: integer?;
|
||||
function f: System.Nullable<integer>;
|
||||
begin
|
||||
Result := 2;
|
||||
end;
|
||||
|
|
|
|||
|
|
@ -1482,6 +1482,8 @@ namespace PascalABCCompiler.TreeConverter
|
|||
}
|
||||
if (tn1.get_internal_interface(internal_interface_kind.delegate_interface) != null)
|
||||
{
|
||||
if (strong)
|
||||
return tn1 == tn2;
|
||||
delegate_internal_interface d1 = tn1.get_internal_interface(internal_interface_kind.delegate_interface) as delegate_internal_interface;
|
||||
delegate_internal_interface d2 = tn2.get_internal_interface(internal_interface_kind.delegate_interface) as delegate_internal_interface;
|
||||
if (d2 != null)
|
||||
|
|
@ -1496,7 +1498,7 @@ namespace PascalABCCompiler.TreeConverter
|
|||
}
|
||||
|
||||
//Этот метод сверяет не только параметры, но и возвращаемое значение
|
||||
public static bool function_eq_params_and_result(function_node left, function_node right, bool weak=false)
|
||||
public static bool function_eq_params_and_result(function_node left, function_node right, bool weak = false)
|
||||
{
|
||||
if (!function_eq_params(left, right, weak))
|
||||
{
|
||||
|
|
@ -1504,7 +1506,7 @@ namespace PascalABCCompiler.TreeConverter
|
|||
}
|
||||
else
|
||||
{
|
||||
return eq_type_nodes(left.return_value_type,right.return_value_type);
|
||||
return eq_type_nodes(left.return_value_type, right.return_value_type, weak);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue