This commit is contained in:
parent
052d0e38a9
commit
77b5121056
|
|
@ -8,9 +8,11 @@ type
|
||||||
end;
|
end;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
if new t1 is t1(var a) then
|
var o := new t1;
|
||||||
|
if o is t1(var a) then
|
||||||
begin
|
begin
|
||||||
i := 2;
|
i := 2;
|
||||||
|
assert(o = a);
|
||||||
end;
|
end;
|
||||||
assert(i = 2);
|
assert(i = 2);
|
||||||
end.
|
end.
|
||||||
45
TestSuite/Deconstructs3.pas
Normal file
45
TestSuite/Deconstructs3.pas
Normal 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.
|
||||||
|
|
@ -93,8 +93,7 @@ namespace PascalABCCompiler.TreeConverter
|
||||||
out type_node[] parameterTypes)
|
out type_node[] parameterTypes)
|
||||||
{
|
{
|
||||||
parameterTypes = new type_node[givenParameterTypes.Length];
|
parameterTypes = new type_node[givenParameterTypes.Length];
|
||||||
if (candidate.parameters.Count == 0)
|
if (candidate.parameters.Count > 0)
|
||||||
return false;
|
|
||||||
candidate.parameters[0].name = "Self"; // SSM 23.06.20 #2268 - это если в NET где-то такое нашли
|
candidate.parameters[0].name = "Self"; // SSM 23.06.20 #2268 - это если в NET где-то такое нашли
|
||||||
var selfParameter = candidate.is_extension_method ? candidate.parameters.FirstOrDefault(IsSelfParameter) : null;
|
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");
|
Debug.Assert(!candidate.is_extension_method || selfParameter != null, "Couldn't find self parameter in extension method");
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue