diff --git a/TestSuite/abstract4.pas b/TestSuite/abstract4.pas new file mode 100644 index 000000000..cbc92695d --- /dev/null +++ b/TestSuite/abstract4.pas @@ -0,0 +1,21 @@ +type + t1 = abstract class + + procedure p1(p: procedure); abstract; + + end; + t2 = class(t1) + + procedure p1(p: procedure); override; + begin + p; + end; + + end; + +begin + var o := new t2; + var i := 0; + o.p1(()->begin i:=1 end); + assert(i = 1); +end. \ No newline at end of file diff --git a/TestSuite/intellisense_tests/shortprog2.pas b/TestSuite/intellisense_tests/shortprog2.pas new file mode 100644 index 000000000..2c87a7f84 --- /dev/null +++ b/TestSuite/intellisense_tests/shortprog2.pas @@ -0,0 +1,2 @@ +## +Println{(procedure Println(a,b,...);)} \ No newline at end of file diff --git a/TreeConverter/TreeConversion/compilation_context.cs b/TreeConverter/TreeConversion/compilation_context.cs index 1e30e9284..e4e40d80d 100644 --- a/TreeConverter/TreeConversion/compilation_context.cs +++ b/TreeConverter/TreeConversion/compilation_context.cs @@ -3943,6 +3943,14 @@ namespace PascalABCCompiler.TreeConverter cmn.overrided_method = FindMethodToOverride(cmn); if (cmn.overrided_method == null) AddError(cmn.loc, "NO_METHOD_TO_OVERRIDE"); + for (int i = 0; i < cmn.parameters.Count; i++) + { + var cp = cmn.parameters[i]; + if (cp.type.IsDelegate && cp.type is common_type_node && (cp.type as common_type_node).name.IndexOf("$") != -1) + { + cp.type = cmn.overrided_method.parameters[i].type; + } + } cmn.SetName(cmn.overrided_method.name); }