class Class {
dynamic field;
Class(this.field);
}

test(a) {
switch (a) {
case (foo: int b) when b != 2:
print(b);
case (foo: (int, int) b) when b != (2, 3):
print(b);
case Class(field: int b) when b != 2:
print(b);
case Class(field: (int, int) b) when b != (2, 3):
print(b);
}
}

testNullable(a) {
switch (a) {
case (foo: (int, int)? b) when b != (2, 3):
print(b);
case Class(field: (int, int)? b) when b != (2, 3):
print(b);
}
}


class[KeywordToken] Class[StringToken] {[BeginToken]
dynamic[KeywordToken] field[StringToken];[SimpleToken]
Class[StringToken]([BeginToken]this[KeywordToken].[SimpleToken]field[StringToken])[SimpleToken];[SimpleToken]
}[SimpleToken]

test[StringToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]
switch[KeywordToken] ([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]
case[KeywordToken] ([BeginToken]foo[StringToken]:[SimpleToken] int[StringToken] b[StringToken])[SimpleToken] when[KeywordToken] b[StringToken] !=[SimpleToken] 2[StringToken]:[SimpleToken]
print[StringToken]([BeginToken]b[StringToken])[SimpleToken];[SimpleToken]
case[KeywordToken] ([BeginToken]foo[StringToken]:[SimpleToken] ([BeginToken]int[StringToken],[SimpleToken] int[StringToken])[SimpleToken] b[StringToken])[SimpleToken] when[KeywordToken] b[StringToken] !=[SimpleToken] ([BeginToken]2[StringToken],[SimpleToken] 3[StringToken])[SimpleToken]:[SimpleToken]
print[StringToken]([BeginToken]b[StringToken])[SimpleToken];[SimpleToken]
case[KeywordToken] Class[StringToken]([BeginToken]field[StringToken]:[SimpleToken] int[StringToken] b[StringToken])[SimpleToken] when[KeywordToken] b[StringToken] !=[SimpleToken] 2[StringToken]:[SimpleToken]
print[StringToken]([BeginToken]b[StringToken])[SimpleToken];[SimpleToken]
case[KeywordToken] Class[StringToken]([BeginToken]field[StringToken]:[SimpleToken] ([BeginToken]int[StringToken],[SimpleToken] int[StringToken])[SimpleToken] b[StringToken])[SimpleToken] when[KeywordToken] b[StringToken] !=[SimpleToken] ([BeginToken]2[StringToken],[SimpleToken] 3[StringToken])[SimpleToken]:[SimpleToken]
print[StringToken]([BeginToken]b[StringToken])[SimpleToken];[SimpleToken]
}[SimpleToken]
}[SimpleToken]

testNullable[StringToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]
switch[KeywordToken] ([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]
case[KeywordToken] ([BeginToken]foo[StringToken]:[SimpleToken] ([BeginToken]int[StringToken],[SimpleToken] int[StringToken])[SimpleToken]?[SimpleToken] b[StringToken])[SimpleToken] when[KeywordToken] b[StringToken] !=[SimpleToken] ([BeginToken]2[StringToken],[SimpleToken] 3[StringToken])[SimpleToken]:[SimpleToken]
print[StringToken]([BeginToken]b[StringToken])[SimpleToken];[SimpleToken]
case[KeywordToken] Class[StringToken]([BeginToken]field[StringToken]:[SimpleToken] ([BeginToken]int[StringToken],[SimpleToken] int[StringToken])[SimpleToken]?[SimpleToken] b[StringToken])[SimpleToken] when[KeywordToken] b[StringToken] !=[SimpleToken] ([BeginToken]2[StringToken],[SimpleToken] 3[StringToken])[SimpleToken]:[SimpleToken]
print[StringToken]([BeginToken]b[StringToken])[SimpleToken];[SimpleToken]
}[SimpleToken]
}[SimpleToken]
[SimpleToken]
