Formatter fixes, code examples.

This commit is contained in:
Александр Погорелов 2019-05-23 10:37:16 +03:00
parent ef5e88a865
commit abaecf807f
19 changed files with 139 additions and 32 deletions

View file

@ -3205,6 +3205,7 @@ namespace CodeFormatters
public override void visit(wild_card_deconstructor_parameter _wild_card_deconstructor_parameter)
{
sb.Append("_");
add_space_after = true;
}

View file

@ -1,13 +1,13 @@
type
CardInfo = auto class
public
public
cardNumber: string;
cv: integer;
end;
Person = class
public
public
name: string;
age: integer;
card: CardInfo;
@ -28,16 +28,16 @@
end;
begin
var a := Arr(1,9,8,7,2,3,4,5);
var a := Arr(1, 9, 8, 7, 2, 3, 4, 5);
// Расширенный is
if a is [1,..,x,_,5] then // a is [1,..,1,1,1,1,1,1,1,1,1,1] - ран тайм эррор -
Println(x); //в расширенном is короткое вычисление логических выражений не работает (#1508)
if a is [1, .., var x, _, 5] then
Println(x);
// match .. with
match a with
[1,9,8,'str',2]: print(1); //Нет проверки соответствия типов в для коллекций - добавить.
[..,4,x]: print(x);
[1, 9, 8, _, 2]: print(1);
[.., var y, var x]: print(x + y);
[_, .., _]: print(3);
end;
end.

View file

@ -1,13 +1,13 @@
type
CardInfo = auto class
public
public
cardNumber: string;
cv: integer;
end;
Person = class
public
public
name: string;
age: integer;
card: CardInfo;
@ -39,8 +39,8 @@ begin
// match .. with
match personArr with
[_,_,Person('Вася', age, _)]: print(age);
[p, .., Person('Маша', _, _)]: print((p as Person).name);
[_, _, Person('Вася', age, _)]: print(age);
[var p, .., Person('Маша', _, _)]: print((p as Person).name);
[..]: print(1);
end;
end.

View file

@ -1,6 +1,6 @@
type
CardInfo = auto class
public
public
cardNumber: string;
cv: integer;
end;
@ -37,7 +37,7 @@ begin
// match .. with
match p with
Person('Петя', _, _): print('Петя');
Person('Вася', _, [_, _, x]): print(x);
Person('Вася', _, [_, _, var x]): print(x);
Person(name, _, [CardInfo(_, 321), .., CardInfo(_, 324)]): print(name);
end;
end.

View file

@ -1,7 +1,7 @@
begin
var a := 3.14;
match a with
1.0, 2.0, 3.0: Println(1); // Надо исправить: double не матчит с integer - несоответствие типов.
1.0, 2.0, 3.0: Println(1);
3.13, 3.14, 3.15, 3.16: print(2);
123.0: print(3);
end;

View file

@ -1,7 +1,7 @@
begin
match (1, 2, 'string') with
(1, _, 1): Println(1); // Нет проверки типов каждого элемента tuple - надо ли?
(1, _, var x): Println(x);
(1, _, 'strin'): print(2);
(_,_,'string'): print(3);
(_, _, 'string'): print(3);
end;
end.

View file

@ -1,6 +1,6 @@
type
CardInfo = auto class
public
public
cardNumber: string;
cv: integer;
end;
@ -29,11 +29,11 @@ begin
var a := new Person('Вася', 11, new CardInfo('12345678', 324));
// Расширенный is
if a is Person('Вася', var age, CardInfo(_, var cv)) then Println(age, cv);
if a is Person(_, var age, CardInfo(_, var cv)) then Println(age, cv);
// match .. with
match a with
Person(1, 12, CardInfo('12345678', var cv)): Println(cv); // Нет проверки соответсвия типов при деконструировании - добавить.
Person('Петя', 12, CardInfo('12345678', var cv)): Println(cv);
Person('Вася', _, CardInfo(cardNum, 324)): Println(cardNum);
Person(_, _, CardInfo(_, x)): Println(x);
end;

View file

@ -2,7 +2,7 @@
// This CSharp output file generated by Gardens Point LEX
// Version: 1.1.3.301
// Machine: DESKTOP-IF20NRO
// DateTime: 5/21/2019 1:27:51 PM
// DateTime: 5/23/2019 10:14:28 AM
// UserName: FatCow
// GPLEX input file <ABCPascal.lex>
// GPLEX frame file <embedded resource>

View file

@ -3520,7 +3520,7 @@ pattern_out_param
pattern_out_param_optional_var
: tkUnderscore
{
$$ = new wild_card_deconstructor_parameter();
$$ = new wild_card_deconstructor_parameter(@$);
}
| literal_or_number
{

View file

@ -2,7 +2,7 @@
// GPPG version 1.3.6
// Machine: DESKTOP-IF20NRO
// DateTime: 5/21/2019 1:27:52 PM
// DateTime: 5/23/2019 10:14:29 AM
// UserName: FatCow
// Input file <ABCPascal.y>
@ -5821,7 +5821,7 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
break;
case 652: // pattern_out_param_optional_var -> tkUnderscore
{
CurrentSemanticValue.stn = new wild_card_deconstructor_parameter();
CurrentSemanticValue.stn = new wild_card_deconstructor_parameter(CurrentLocationSpan);
}
break;
case 653: // pattern_out_param_optional_var -> literal_or_number

View file

@ -0,0 +1,46 @@
type
CardInfo = auto class
public
cardNumber: string;
cv: integer;
end;
Person = class
public
name: string;
age: integer;
card: CardInfo;
constructor(name: string; age: integer; card: CardInfo);
begin
self.name := name;
self.age := age;
self.card := card;
end;
procedure Deconstruct(var name: string; var age: integer; var card: CardInfo);
begin
name := self.name;
age := self.age;
card := self.card;
end;
end;
begin
var p1 := new Person('Вася', 11, new CardInfo('12345671', 321));
var p2 := new Person('Петя', 12, new CardInfo('12345672', 322));
var p3 := new Person('Маша', 13, new CardInfo('12345673', 323));
var personArr := Arr(p1, p2, p3);
// Расширенный is
if personArr is [ Person(name1 , 11, CardInfo( _, cv)), _, Person( name2, 13, _)] then
assert(name1.Equals('Вася') and (cv = 321) and name2.Equals('Маша'));
// match .. with
match personArr with
[ _, _, Person('Вася', var age, _)]: assert(false);
[ var p, .. , Person('Маша', _, _)]: assert((p as Person).name.Equals('Вася'));
[ .. ]: assert(false);
end;
end.

View file

@ -0,0 +1,7 @@
begin
match ( 1, 2, 'string' ) with
( 1, _, 'str' ): assert(false);
( 1, _, 'strin'): assert(false);
( _, _, 'string'): ;
end;
end.

View file

@ -0,0 +1,46 @@
type
CardInfo = auto class
public
cardNumber: string;
cv: integer;
end;
Person = class
public
name: string;
age: integer;
card: CardInfo;
constructor(name: string; age: integer; card: CardInfo);
begin
self.name := name;
self.age := age;
self.card := card;
end;
procedure Deconstruct(var name: string; var age: integer; var card: CardInfo);
begin
name := self.name;
age := self.age;
card := self.card;
end;
end;
begin
var p1 := new Person('Вася', 11, new CardInfo('12345671', 321));
var p2 := new Person('Петя', 12, new CardInfo('12345672', 322));
var p3 := new Person('Маша', 13, new CardInfo('12345673', 323));
var personArr := Arr(p1, p2, p3);
// Расширенный is
if personArr is [Person(name1, 11, CardInfo(_, cv)), _, Person(name2, 13, _)] then
assert(name1.Equals('Вася') and (cv = 321) and name2.Equals('Маша'));
// match .. with
match personArr with
[_, _, Person('Вася', var age, _)]: assert(false);
[var p, .., Person('Маша', _, _)]: assert((p as Person).name.Equals('Вася'));
[..]: assert(false);
end;
end.

View file

@ -0,0 +1,7 @@
begin
match (1, 2, 'string') with
(1, _, 'str'): assert(false);
(1, _, 'strin'): assert(false);
(_, _, 'string'): ;
end;
end.

View file

@ -1,6 +1,6 @@
begin
var a := Arr(1,9,8,7,2,3,4,5);
var c : procedure := () -> begin
var a := Arr(1, 9, 8, 7, 2, 3, 4, 5);
var c: procedure := () -> begin
match a with
[.., 4, var x]: assert(x = 5);
end;

View file

@ -1,13 +1,13 @@
type
CardInfo = auto class
public
public
cardNumber: string;
cv: integer;
end;
Person = class
public
public
name: string;
age: integer;
card: CardInfo;
@ -39,7 +39,7 @@ begin
// match .. with
match personArr with
[_,_,Person('Вася', var age, _)]: assert(false);
[_, _, Person('Вася', var age, _)]: assert(false);
[var p, .., Person('Маша', _, _)]: assert((p as Person).name.Equals('Вася'));
[..]: assert(false);
end;

View file

@ -1,6 +1,6 @@
type
CardInfo = auto class
public
public
cardNumber: string;
cv: integer;
end;

View file

@ -2,6 +2,6 @@
match (1, 2, 'string') with
(1, _, 'str'): assert(false);
(1, _, 'strin'): assert(false);
(_,_,'string'): ;
(_, _, 'string'): ;
end;
end.

View file

@ -1,6 +1,6 @@
type
CardInfo = auto class
public
public
cardNumber: string;
cv: integer;
end;
@ -29,7 +29,7 @@ begin
var a := new Person('Вася', 11, new CardInfo('12345678', 324));
// Расширенный is
if a is Person('Вася', var age, CardInfo(_, var cv)) then assert((age = 11) and (cv = 324));
if a is Person(_, var age, CardInfo(_, var cv)) then assert((age = 11) and (cv = 324));
// match .. with
match a with