Josh Triplett
6c04e0a7ae
Rewrite macro_rules! parser to not use the MBE engine itself
...
The `macro_rules!` parser was written to match the series of rules using
the macros-by-example (MBE) engine and a hand-written equivalent of the
left-hand side of a MBE macro. This was complex to read, difficult to
extend, and produced confusing error messages. Because it was using the
MBE engine, any parse failure would be reported as if some macro was
being applied to the `macro_rules!` invocation itself; for instance,
errors would talk about "macro invocation", "macro arguments", and
"macro call", when they were actually about the macro *definition*.
And in practice, the `macro_rules!` parser only used the MBE engine to
extract the left-hand side and right-hand side of each rule as a token
tree, and then parsed the rest using a separate parser.
Rewrite it to parse the series of rules using a simple loop, instead.
This makes it more extensible in the future, and improves error
messages. For instance, omitting a semicolon between rules will result
in "expected `;`" and "unexpected token", rather than the confusing "no
rules expected this token in macro call".
This work was greatly aided by pair programming with Vincenzo Palazzo
and Eric Holk.
2025-06-26 15:20:42 -07:00
..
2024-11-27 07:18:25 -08:00
2025-04-17 19:45:28 +08:00
2025-05-03 22:49:23 +03:00
2024-03-09 22:15:50 +01:00
2024-03-09 22:15:50 +01:00
2024-03-09 22:15:50 +01:00
2024-03-09 22:15:50 +01:00
2024-03-09 22:15:50 +01:00
2024-03-09 22:15:50 +01:00
2024-07-12 03:02:57 +00:00
2024-07-12 03:02:57 +00:00
2025-05-03 22:39:43 +08:00
2025-05-03 22:39:43 +08:00
2024-09-27 15:41:04 +08:00
2024-09-27 15:41:04 +08:00
2024-09-27 15:41:04 +08:00
2024-08-04 00:11:16 +08:00
2024-08-04 00:11:16 +08:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2024-07-18 20:08:38 +00:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2024-07-12 03:22:32 +00:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2025-01-22 00:52:27 +00:00
2025-01-22 00:52:27 +00:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2024-11-26 02:50:48 +08:00
2025-06-26 15:20:42 -07:00
2025-06-26 15:20:42 -07:00
2023-01-11 09:32:08 +00:00
2024-06-21 19:00:18 -04:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2025-03-29 13:30:20 +03:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-01-11 09:32:08 +00:00
2025-01-23 06:01:36 +00:00
2025-01-23 06:01:36 +00:00
2025-06-11 15:30:15 +01:00
2025-06-11 15:30:15 +01:00
2023-01-11 09:32:08 +00:00
2023-01-11 09:32:08 +00:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-10-03 21:21:02 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2025-02-10 20:21:39 +00:00
2024-02-16 20:02:50 +00:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2024-11-29 06:10:15 +11:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-01-11 09:32:08 +00:00
2024-07-26 15:14:05 +02:00
2024-07-26 15:14:05 +02:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2025-04-03 11:08:55 +03:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2024-11-26 02:50:48 +08:00
2023-08-01 23:30:40 +08:00
2023-11-24 19:15:52 +01:00
2023-08-01 23:30:40 +08:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2025-02-10 20:21:39 +00:00
2024-01-28 16:12:21 +01:00
2024-11-23 08:57:25 -07:00
2024-01-28 16:12:21 +01:00
2025-03-21 09:35:31 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2024-07-12 03:02:57 +00:00
2024-08-04 00:11:16 +08:00
2024-08-04 00:11:16 +08:00
2025-02-10 20:21:39 +00:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2025-02-10 20:21:39 +00:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2024-07-12 03:02:57 +00:00
2023-10-12 21:50:18 +00:00
2024-04-25 13:09:13 +02:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-01-11 09:32:08 +00:00
2023-05-02 22:36:24 +00:00
2023-05-02 22:36:24 +00:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2025-02-10 20:21:39 +00:00
2024-02-16 20:02:50 +00:00
2025-04-16 20:24:55 +10:00
2023-10-24 21:27:05 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-01-11 09:32:08 +00:00
2023-01-11 09:32:08 +00:00
2023-09-06 09:05:07 +05:30
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-05-01 16:15:13 +08:00
2025-02-10 20:21:39 +00:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2024-07-12 03:02:57 +00:00
2023-01-11 09:32:08 +00:00
2023-01-11 09:32:08 +00:00
2024-02-16 20:02:50 +00:00
2025-04-17 19:45:28 +08:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2024-07-12 03:02:57 +00:00
2024-05-20 21:36:20 +02:00
2024-07-12 03:02:57 +00:00
2023-10-24 21:27:05 +00:00
2023-10-24 21:27:05 +00:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2024-07-12 03:02:57 +00:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2024-07-12 03:02:57 +00:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2024-07-12 03:02:57 +00:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2025-02-10 20:21:39 +00:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2024-07-12 03:02:57 +00:00
2025-03-29 13:30:20 +03:00
2025-03-29 13:30:20 +03:00
2023-02-28 07:55:19 +00:00
2023-11-24 19:15:52 +01:00
2023-02-28 07:55:19 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-01-11 09:32:08 +00:00
2023-02-28 07:55:19 +00:00
2023-11-24 19:15:52 +01:00
2023-10-24 21:27:05 +00:00
2023-11-24 19:15:52 +01:00
2025-03-29 13:30:20 +03:00
2025-03-29 13:30:20 +03:00
2023-02-28 07:55:19 +00:00
2024-07-18 20:08:38 +00:00
2025-03-29 13:30:20 +03:00
2025-03-29 13:30:20 +03:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-02-28 07:55:19 +00:00
2024-07-18 20:08:38 +00:00
2025-03-29 13:30:20 +03:00
2024-07-18 20:08:38 +00:00
2023-02-28 07:55:19 +00:00
2023-02-28 07:55:19 +00:00
2023-04-28 11:56:02 +00:00
2023-09-06 09:05:07 +05:30
2025-03-29 13:30:20 +03:00
2025-03-29 13:30:20 +03:00
2024-05-02 19:42:31 -04:00
2025-03-29 13:30:20 +03:00
2025-03-29 13:30:20 +03:00
2025-03-29 13:30:20 +03:00
2025-03-29 13:30:20 +03:00
2024-03-17 23:35:18 +00:00
2025-02-10 20:21:39 +00:00
2025-04-03 21:41:58 +00:00
2025-04-03 21:41:58 +00:00
2025-02-28 08:36:12 +11:00
2025-02-28 08:36:12 +11:00
2023-01-11 09:32:08 +00:00
2025-02-14 00:44:10 -08:00
2024-02-16 20:02:50 +00:00
2023-02-28 07:55:19 +00:00
2023-11-24 19:15:52 +01:00
2025-04-03 11:08:55 +03:00
2025-04-03 11:08:55 +03:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2023-05-02 22:36:24 +00:00
2023-02-28 07:55:19 +00:00
2024-07-18 20:08:38 +00:00
2023-01-11 09:32:08 +00:00
2023-01-11 09:32:08 +00:00
2023-10-24 21:27:05 +00:00
2024-02-18 11:19:24 +03:00
2024-02-18 11:19:24 +03:00
2024-02-18 11:19:24 +03:00
2025-04-03 11:08:55 +03:00
2025-04-03 11:08:55 +03:00
2025-04-03 11:08:55 +03:00
2025-04-03 11:08:55 +03:00
2024-02-16 20:02:50 +00:00
2023-01-11 09:32:08 +00:00
2023-01-11 09:32:08 +00:00
2023-01-11 09:32:08 +00:00
2023-11-29 18:47:32 +00:00
2023-10-24 21:27:05 +00:00
2023-11-24 19:15:52 +01:00
2023-10-24 21:27:05 +00:00
2023-10-24 21:27:05 +00:00
2023-10-24 21:27:05 +00:00
2023-10-24 21:27:05 +00:00
2023-10-24 21:27:05 +00:00
2023-11-24 19:15:52 +01:00
2023-01-26 10:52:57 +08:00
2023-11-24 19:15:52 +01:00
2024-02-16 20:02:50 +00:00
2023-01-11 09:32:08 +00:00
2024-07-12 03:02:57 +00:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2024-07-12 03:02:57 +00:00
2024-03-22 20:53:42 -04:00
2025-02-10 20:21:39 +00:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-08-15 01:03:09 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2024-11-24 19:42:33 +01:00
2024-11-24 19:42:33 +01:00
2025-04-15 10:08:49 +02:00
2025-04-15 10:08:49 +02:00
2024-02-16 20:02:50 +00:00
2024-06-04 14:19:42 -03:00
2024-06-04 14:19:42 -03:00
2024-02-16 20:02:50 +00:00
2023-11-24 19:15:52 +01:00
2024-06-04 14:19:42 -03:00
2024-06-04 14:19:42 -03:00
2024-06-04 14:19:42 -03:00
2024-06-04 14:19:42 -03:00
2024-02-16 20:02:50 +00:00
2023-11-24 19:15:52 +01:00
2024-02-16 20:02:50 +00:00
2023-11-24 19:15:52 +01:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2023-11-24 19:15:52 +01:00
2025-03-29 13:30:20 +03:00
2025-03-29 13:30:20 +03:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2025-03-29 13:30:20 +03:00
2025-03-29 13:30:20 +03:00
2024-02-16 20:02:50 +00:00
2023-11-24 19:15:52 +01:00
2025-03-29 13:30:20 +03:00
2024-07-18 20:08:38 +00:00
2023-01-11 09:32:08 +00:00
2025-02-10 20:21:39 +00:00
2023-01-11 09:32:08 +00:00
2025-02-10 20:21:39 +00:00
2025-03-29 13:30:20 +03:00
2024-07-18 20:08:38 +00:00
2024-06-04 14:19:42 -03:00
2024-06-04 14:19:42 -03:00
2024-02-08 08:10:43 +00:00
2025-02-14 00:44:10 -08:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2024-07-12 03:22:32 +00:00
2023-01-11 09:32:08 +00:00
2023-01-11 09:32:08 +00:00
2024-06-04 14:19:42 -03:00
2024-06-04 14:19:42 -03:00
2024-06-04 14:19:42 -03:00
2024-06-04 14:19:42 -03:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2023-01-11 09:32:08 +00:00
2024-02-16 20:02:50 +00:00
2025-03-29 13:30:20 +03:00
2025-03-29 13:30:20 +03:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2023-10-03 21:21:02 +00:00
2025-04-08 23:06:31 +03:00
2025-01-02 23:39:16 +00:00
2024-11-27 07:18:25 -08:00
2023-11-24 19:15:52 +01:00
2023-10-24 21:27:05 +00:00
2023-10-24 21:27:05 +00:00
2023-01-11 09:32:08 +00:00
2025-02-10 20:21:39 +00:00
2023-10-24 21:27:05 +00:00
2023-11-24 19:15:52 +01:00
2023-05-01 16:15:13 +08:00
2023-05-01 16:15:13 +08:00
2023-01-11 09:32:08 +00:00
2023-01-11 09:32:08 +00:00
2025-04-08 23:06:31 +03:00
2023-11-24 19:15:52 +01:00
2025-03-25 17:33:09 +03:00
2023-01-11 09:32:08 +00:00
2023-09-21 23:20:47 +08:00
2023-11-24 19:15:52 +01:00
2023-09-21 23:20:47 +08:00
2023-11-24 19:15:52 +01:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2025-02-10 20:21:39 +00:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2025-02-10 20:21:39 +00:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2025-02-10 20:21:39 +00:00
2025-04-08 23:06:31 +03:00
2025-04-08 23:06:31 +03:00
2025-02-10 20:21:39 +00:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2025-02-10 20:21:39 +00:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2023-01-11 09:32:08 +00:00
2023-11-24 19:15:52 +01:00
2025-04-08 23:06:31 +03:00
2025-02-10 20:21:39 +00:00
2023-10-24 21:27:05 +00:00
2023-10-24 21:27:05 +00:00
2025-04-18 15:57:29 +02:00
2025-04-18 15:57:29 +02:00
2023-10-24 21:27:05 +00:00
2023-10-24 21:27:05 +00:00
2024-07-12 03:22:32 +00:00
2025-03-29 13:30:20 +03:00
2024-07-18 20:08:38 +00:00
2025-05-07 22:56:14 +08:00
2025-05-07 22:56:14 +08:00
2023-03-01 13:14:30 +00:00
2024-07-18 20:08:38 +00:00
2023-12-12 15:54:25 +11:00
2023-12-12 15:54:25 +11:00
2023-10-24 21:27:05 +00:00
2025-02-10 20:21:39 +00:00
2023-10-24 21:27:05 +00:00
2025-02-10 20:21:39 +00:00
2024-02-16 20:02:50 +00:00
2024-07-18 20:08:38 +00:00
2025-06-14 13:44:43 +08:00
2025-06-14 13:44:43 +08:00
2025-06-14 13:44:43 +08:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2024-07-18 20:08:38 +00:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2024-07-12 03:02:57 +00:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2023-11-24 19:15:52 +01:00
2023-03-05 14:23:43 +01:00
2023-11-24 19:15:52 +01:00
2023-10-24 21:27:05 +00:00
2025-02-10 20:21:39 +00:00
2023-04-07 08:54:13 +12:00
2025-02-10 20:21:39 +00:00
2023-05-13 00:33:27 +08:00
2023-11-24 19:15:52 +01:00
2023-05-13 19:40:17 +08:00
2025-02-10 20:21:39 +00:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2023-10-24 21:27:05 +00:00
2023-06-11 14:36:20 +08:00
2023-06-11 14:36:20 +08:00
2023-09-06 09:05:07 +05:30
2023-11-24 19:15:52 +01:00
2024-02-16 20:02:50 +00:00
2024-07-12 03:02:58 +00:00
2023-10-24 21:27:05 +00:00
2023-11-24 19:15:52 +01:00
2025-06-03 11:45:58 +02:00
2025-06-03 11:45:58 +02:00
2024-02-16 20:02:50 +00:00
2025-04-22 00:53:12 +05:00
2025-04-22 00:53:12 +05:00
2023-12-02 23:47:39 +08:00
2024-01-13 12:46:58 -05:00
2024-07-04 19:16:47 -04:00
2024-07-04 19:16:47 -04:00
2024-07-04 19:16:47 -04:00
2024-07-04 19:16:47 -04:00
2024-07-04 19:16:47 -04:00
2025-03-01 22:02:46 +08:00
2024-07-04 19:16:47 -04:00
2024-07-04 19:16:47 -04:00
2024-07-04 19:16:47 -04:00
2024-07-04 19:16:47 -04:00
2024-07-12 03:02:57 +00:00
2024-07-12 03:02:57 +00:00
2024-02-16 20:02:50 +00:00
2024-02-16 20:02:50 +00:00
2025-02-10 20:21:39 +00:00