0937087af8
This allows the parser to parse constant patterns at lower precedence level in order to recognize more expressions in this context. To support this, _parsePrecedenceExpressionLoop special cases a few cases that should _not_ be parsed as expression in a constant pattern context. Closes #50996 Change-Id: I43bb0ce52d366bd2dfcf47e12eec5883402f668a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/282100 Commit-Queue: Johnni Winther <johnniwinther@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Reviewed-by: Jens Johansen <jensj@google.com>
170 lines
9.1 KiB
Plaintext
170 lines
9.1 KiB
Plaintext
NOTICE: Stream was rewritten by parser!
|
|
|
|
import 'const_patterns_binary.dart' as prefix;
|
|
|
|
const value = 1;
|
|
|
|
class Class {
|
|
static const value = 2;
|
|
}
|
|
|
|
method<T>(o) {
|
|
switch (o) {
|
|
case 1 || 2:
|
|
case 1 && 2:
|
|
case 1 as T:
|
|
case const Object():
|
|
case 1 + 2:
|
|
case 1 - 2:
|
|
case 1 * 2:
|
|
case 1 / 2:
|
|
case 1 ~/ 2:
|
|
case 1 % 2:
|
|
case 1 == 2:
|
|
case 1 != 2:
|
|
case 1 ^ 2:
|
|
case 1 & 2:
|
|
case 1 | 2:
|
|
case 1 < 2:
|
|
case 1 <= 2:
|
|
case 1 > 2:
|
|
case 1 >= 2:
|
|
case 1 << 2:
|
|
case 1 >> 2:
|
|
case 1 >>> 2:
|
|
case 1 + 2 + 3:
|
|
case prefix.value as T:
|
|
case prefix.Class.value as T:
|
|
case const 1 as int:
|
|
case const 1 + 2:
|
|
case const 1 - 2:
|
|
case const 1 * 2:
|
|
case const 1 / 2:
|
|
case const 1 ~/ 2:
|
|
case const 1 % 2:
|
|
case const 1 == 2:
|
|
case const 1 != 2:
|
|
case const 1 ^ 2:
|
|
case const 1 & 2:
|
|
case const 1 | 2:
|
|
case const 1 < 2:
|
|
case const 1 <= 2:
|
|
case const 1 > 2:
|
|
case const 1 >= 2:
|
|
case const 1 << 2:
|
|
case const 1 >> 2:
|
|
case const 1 >>> 2:
|
|
case const 1 + 2 + 3:
|
|
case const Object() == 2:
|
|
case const <int>[] as List<T>:
|
|
case const (1 + 2):
|
|
case const (1 - 2):
|
|
case const (1 * 2):
|
|
case const (1 / 2):
|
|
case const (1 ~/ 2):
|
|
case const (1 % 2):
|
|
case const (1 == 2):
|
|
case const (1 != 2):
|
|
case const (1 ^ 2):
|
|
case const (1 & 2):
|
|
case const (1 | 2):
|
|
case const (1 < 2):
|
|
case const (1 <= 2):
|
|
case const (1 > 2):
|
|
case const (1 >= 2):
|
|
case const (1 << 2):
|
|
case const (1 >> 2):
|
|
case const (1 >>> 2):
|
|
case const (1 + 2 + 3):
|
|
case 1 :*synthetic*?? 2;*synthetic*;:
|
|
case o++:
|
|
case o--:
|
|
case ++o:
|
|
case --o:
|
|
}
|
|
}
|
|
|
|
import[KeywordToken] 'const_patterns_binary.dart'[StringToken] as[KeywordToken] prefix[StringToken];[SimpleToken]
|
|
|
|
const[KeywordToken] value[StringToken] =[SimpleToken] 1[StringToken];[SimpleToken]
|
|
|
|
class[KeywordToken] Class[StringToken] {[BeginToken]
|
|
static[KeywordToken] const[KeywordToken] value[StringToken] =[SimpleToken] 2[StringToken];[SimpleToken]
|
|
}[SimpleToken]
|
|
|
|
method[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken]o[StringToken])[SimpleToken] {[BeginToken]
|
|
switch[KeywordToken] ([BeginToken]o[StringToken])[SimpleToken] {[BeginToken]
|
|
case[KeywordToken] 1[StringToken] ||[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] 1[StringToken] &&[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] 1[StringToken] as[KeywordToken] T[StringToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] Object[StringToken]([BeginToken])[SimpleToken]:[SimpleToken]
|
|
case[KeywordToken] 1[StringToken] +[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] 1[StringToken] -[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] 1[StringToken] *[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] 1[StringToken] /[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] 1[StringToken] ~/[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] 1[StringToken] %[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] 1[StringToken] ==[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] 1[StringToken] !=[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] 1[StringToken] ^[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] 1[StringToken] &[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] 1[StringToken] |[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] 1[StringToken] <[BeginToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] 1[StringToken] <=[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] 1[StringToken] >[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] 1[StringToken] >=[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] 1[StringToken] <<[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] 1[StringToken] >>[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] 1[StringToken] >>>[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] 1[StringToken] +[SimpleToken] 2[StringToken] +[SimpleToken] 3[StringToken]:[SimpleToken]
|
|
case[KeywordToken] prefix[StringToken].[SimpleToken]value[StringToken] as[KeywordToken] T[StringToken]:[SimpleToken]
|
|
case[KeywordToken] prefix[StringToken].[SimpleToken]Class[StringToken].[SimpleToken]value[StringToken] as[KeywordToken] T[StringToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] 1[StringToken] as[KeywordToken] int[StringToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] 1[StringToken] +[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] 1[StringToken] -[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] 1[StringToken] *[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] 1[StringToken] /[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] 1[StringToken] ~/[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] 1[StringToken] %[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] 1[StringToken] ==[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] 1[StringToken] !=[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] 1[StringToken] ^[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] 1[StringToken] &[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] 1[StringToken] |[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] 1[StringToken] <[BeginToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] 1[StringToken] <=[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] 1[StringToken] >[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] 1[StringToken] >=[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] 1[StringToken] <<[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] 1[StringToken] >>[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] 1[StringToken] >>>[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] 1[StringToken] +[SimpleToken] 2[StringToken] +[SimpleToken] 3[StringToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] Object[StringToken]([BeginToken])[SimpleToken] ==[SimpleToken] 2[StringToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] <[BeginToken]int[StringToken]>[SimpleToken][[BeginToken]][SimpleToken] as[KeywordToken] List[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] ([BeginToken]1[StringToken] +[SimpleToken] 2[StringToken])[SimpleToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] ([BeginToken]1[StringToken] -[SimpleToken] 2[StringToken])[SimpleToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] ([BeginToken]1[StringToken] *[SimpleToken] 2[StringToken])[SimpleToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] ([BeginToken]1[StringToken] /[SimpleToken] 2[StringToken])[SimpleToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] ([BeginToken]1[StringToken] ~/[SimpleToken] 2[StringToken])[SimpleToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] ([BeginToken]1[StringToken] %[SimpleToken] 2[StringToken])[SimpleToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] ([BeginToken]1[StringToken] ==[SimpleToken] 2[StringToken])[SimpleToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] ([BeginToken]1[StringToken] !=[SimpleToken] 2[StringToken])[SimpleToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] ([BeginToken]1[StringToken] ^[SimpleToken] 2[StringToken])[SimpleToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] ([BeginToken]1[StringToken] &[SimpleToken] 2[StringToken])[SimpleToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] ([BeginToken]1[StringToken] |[SimpleToken] 2[StringToken])[SimpleToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] ([BeginToken]1[StringToken] <[BeginToken] 2[StringToken])[SimpleToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] ([BeginToken]1[StringToken] <=[SimpleToken] 2[StringToken])[SimpleToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] ([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] ([BeginToken]1[StringToken] >=[SimpleToken] 2[StringToken])[SimpleToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] ([BeginToken]1[StringToken] <<[SimpleToken] 2[StringToken])[SimpleToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] ([BeginToken]1[StringToken] >>[SimpleToken] 2[StringToken])[SimpleToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] ([BeginToken]1[StringToken] >>>[SimpleToken] 2[StringToken])[SimpleToken]:[SimpleToken]
|
|
case[KeywordToken] const[KeywordToken] ([BeginToken]1[StringToken] +[SimpleToken] 2[StringToken] +[SimpleToken] 3[StringToken])[SimpleToken]:[SimpleToken]
|
|
case[KeywordToken] 1[StringToken] :[SyntheticToken][SyntheticStringToken]??[SimpleToken] 2[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken]:[SimpleToken]
|
|
case[KeywordToken] o[StringToken]++[SimpleToken]:[SimpleToken]
|
|
case[KeywordToken] o[StringToken]--[SimpleToken]:[SimpleToken]
|
|
case[KeywordToken] ++[SimpleToken]o[StringToken]:[SimpleToken]
|
|
case[KeywordToken] --[SimpleToken]o[StringToken]:[SimpleToken]
|
|
}[SimpleToken]
|
|
}[SimpleToken][SimpleToken]
|