bug fix #1211
This commit is contained in:
parent
b765e1ad63
commit
932600b1c6
|
|
@ -8537,6 +8537,7 @@ namespace PascalABCCompiler.NETGenerator
|
||||||
real_parameters[1].visit(this);
|
real_parameters[1].visit(this);
|
||||||
il.Emit(OpCodes.Call, mi_right);
|
il.Emit(OpCodes.Call, mi_right);
|
||||||
EmitOperator(value);
|
EmitOperator(value);
|
||||||
|
is_dot_expr = tmp_dot;
|
||||||
if (tmp_dot)
|
if (tmp_dot)
|
||||||
{
|
{
|
||||||
is_dot_expr = 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
|
begin
|
||||||
Result := 2;
|
Result := 2;
|
||||||
end;
|
end;
|
||||||
|
|
|
||||||
|
|
@ -1482,6 +1482,8 @@ namespace PascalABCCompiler.TreeConverter
|
||||||
}
|
}
|
||||||
if (tn1.get_internal_interface(internal_interface_kind.delegate_interface) != null)
|
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 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;
|
delegate_internal_interface d2 = tn2.get_internal_interface(internal_interface_kind.delegate_interface) as delegate_internal_interface;
|
||||||
if (d2 != null)
|
if (d2 != null)
|
||||||
|
|
@ -1504,7 +1506,7 @@ namespace PascalABCCompiler.TreeConverter
|
||||||
}
|
}
|
||||||
else
|
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