This commit is contained in:
Ivan Bondarev 2023-04-09 10:47:52 +02:00
parent 052d0e38a9
commit 77b5121056
3 changed files with 50 additions and 4 deletions

View file

@ -8,9 +8,11 @@ type
end;
begin
if new t1 is t1(var a) then
var o := new t1;
if o is t1(var a) then
begin
i := 2;
assert(o = a);
end;
assert(i = 2);
end.

View file

@ -0,0 +1,45 @@
type
Person = class
name: string;
age: integer;
constructor(name: string; age: integer);
begin
self.name := name;
self.age := age;
end;
procedure Deconstruct(var name: string; var age: integer);
begin
name := self.name;
age := self.age;
end;
end;
begin
var p := new Person('John', 25);
var s := '';
var i := 0;
if p is Person(var name, var age) then
begin
s := name;
i := age;
end;
assert(s = 'John');
assert(i = 25);
s := '';
i := 0;
match p with
Person(name, age):
begin
s := name;
i := age;
end;
end;
assert(s = 'John');
assert(i = 25);
end.

View file

@ -93,9 +93,8 @@ namespace PascalABCCompiler.TreeConverter
out type_node[] parameterTypes)
{
parameterTypes = new type_node[givenParameterTypes.Length];
if (candidate.parameters.Count == 0)
return false;
candidate.parameters[0].name = "Self"; // SSM 23.06.20 #2268 - это если в NET где-то такое нашли
if (candidate.parameters.Count > 0)
candidate.parameters[0].name = "Self"; // SSM 23.06.20 #2268 - это если в NET где-то такое нашли
var selfParameter = candidate.is_extension_method ? candidate.parameters.FirstOrDefault(IsSelfParameter) : null;
Debug.Assert(!candidate.is_extension_method || selfParameter != null, "Couldn't find self parameter in extension method");
var candidateParameterTypes =