go/test/fixedbugs
Robert Griesemer 09ada1af8f cmd/compile/internal/syntax: parser to accept ~x as unary expression
Accept ~x as ordinary unary expression in the parser but recognize
such expressions as invalid in the type checker.

This change opens the door to recognizing complex type constraint
literals such as `*E|~int` in `[P *E|~int]` and parse them correctly
instead of reporting a parse error because `P*E|~int` syntactically
looks like an incorrect array length expression (binary expression
where the RHS of | is an invalid unary expression ~int).

As a result, the parser is more forgiving with expressions but the
type checker will reject invalid uses as before.

We could pass extra information into the binary/unary expression
parse functions to prevent the use of ~ in invalid situations but
it doesn't seem worth the trouble. In fact it may be advantageous
to allow a more liberal expression syntax especially in the presence
of errors (better parser synchronization after an error).

Preparation for fixing #49482.

Change-Id: I119e8bd9445dfa6460fcd7e0658e3554a34b2769
Reviewed-on: https://go-review.googlesource.com/c/go/+/402255
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Robert Griesemer <gri@google.com>
Auto-Submit: Robert Griesemer <gri@google.com>
2022-04-26 02:19:42 +00:00
..
2018-10-18 04:57:41 +00:00
2021-08-13 20:49:48 +00:00
2022-03-09 21:31:58 +00:00
2022-03-09 21:31:58 +00:00
2017-09-19 18:08:50 +00:00
2017-09-15 02:39:16 +00:00
2016-12-08 23:22:37 +00:00
2021-02-22 22:53:51 +00:00
2016-10-12 14:57:26 +00:00
2017-05-18 21:33:05 +00:00
2021-04-21 20:24:34 +00:00
2021-04-21 20:24:34 +00:00
2022-03-09 21:31:58 +00:00
2017-09-08 20:10:48 +00:00
2017-09-08 20:10:48 +00:00
2022-03-09 21:31:58 +00:00
2022-03-09 21:31:58 +00:00
2022-03-09 21:31:58 +00:00
2022-03-09 21:31:58 +00:00
2019-04-24 19:55:13 +00:00
2019-07-18 11:34:23 +00:00
2019-07-18 17:24:59 +00:00
2021-02-22 20:00:00 +00:00
2020-10-30 19:30:44 +00:00
2020-11-21 16:46:05 +00:00
2021-05-22 00:51:17 +00:00