964: Forbid unresolved test cases r=CohenArthur a=CohenArthur
Closes#923
965: macro-invoc-lexer: Split implementation in its own file r=CohenArthur a=CohenArthur
Closes#949
Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>
950: Match macro repetitions r=CohenArthur a=CohenArthur
This PR adds support for matching macro invocations and counting the amount of times they've been matched
Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>
951: Add name resolution to slices r=philberty a=philberty
This is the first part to support slices where we complete the name
resolution of the SliceType with its element as well as the range
expressions used in construction.
This patch also includes separation of the implementation from the
headers to try and incrementally improve build speed.
Addresses #849
Co-authored-by: Philip Herron <philip.herron@embecosm.com>
944: parser: Add `clear_errors()` method r=CohenArthur a=CohenArthur
Clears all errors from the error table so we can reuse the parser in later situations. I'm unsure whether or not the method should also emit all of the errors if present? In that case, we might want to rename it or add another wrapper that emits then clears
Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>
942: Removed Lambda Function within AST::PathPattern r=philberty a=mvvsmk
Addresses issue #717
1) Changed the rust-path.h and removed the iterate_path_segments
fuction.
2) Removed the lambda fuction form rust-ast-lower.cc and replaced it
with a for loop.
Do let me know if I missed anything or could improve on something.
Signed-off-by : M V V S Manoj Kumar <mvvsmanojkumar@gmail.com>
Co-authored-by: M V V S Manoj Kumar <mvvsmanojkumar@gmail.com>
940: Add more location info to AST structures r=CohenArthur a=CohenArthur
Two classes still remain locus-less: `TupleStructItems` and `TuplePatternItems` as I do not believe they are constructed at the moment.
Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>
938: First pass at declarative macro expansion r=philberty a=philberty
This does not support repetition matchers but it supports simple
declarative macros and transcribes them. The approach taken here is that
we reuse our existing parser to call the apropriate functions as specified
as part of the MacroFragmentType enum if the parser does not have errors
parsing that item then it must be a match.
Then once we match a rule we have a map of the token begin/end offsets
for each fragment match, this is then used to adjust and create a new token
stream for the macro rule definition so that when we feed it to the parser
the tokens are already substituted. The resulting expression or item is
then attached to the respective macro invocation and this is then name
resolved and used for hir lowering.
Fixes#17#22
Addresses #573
Co-authored-by: Philip Herron <philip.herron@embecosm.com>
Addresses issue #717
1) Changed the rust-path.h and removed the iterate_path_segments
fuction.
2) Removed the lambda fuction form rust-ast-lower.cc and replaced it
with a for loop.
Signed-off-by : M V V S Manoj Kumar <mvvsmanojkumar@gmail.com>
This allows for macro invocation at the toplevel or as statements. This
patched required us to propogate the delimited token tree fix to include
the delimiter tokens. The rest of the fix was straight forward to call
the apropriate visitors in names resolution and hir lowering.
Some thought will be needed to handle hir lowering for repeating items.
When we parse DelimTokenTree's the delimiter's are synthesised when we
ask for the token stream which results in tokens lacking location info.
This removes the hack by adding the actual tokens from the lexer into the
stream.
This is the first pass at implementing macros more testcases are needed.
This does not support repetition matchers but it supports simple
declarative macros and transcribes them. The approach taken here is that
we reuse our existing parser to call the apropriate functions as specified
as part of the MacroFragmentType enum if the parser does not have errors
parsing that item then it must be a match.
Then once we match a rule we have a map of the token begin/end offsets
for each fragment match, this is then used to adjust and create a new token
stream for the macro rule definition so that when we feed it to the parser
the tokens are already substituted. The resulting expression or item is
then attached to the respective macro invocation and this is then name
resolved and used for hir lowering.
Fixes#17#22
Addresses #573
935: frust-cfg: Only allow double quoted values r=philberty a=CohenArthur
Closes#910
This PR separates the `handle_cfg_option()` function in two, separating the parsing logic from the session logic. The parsing logic is able to be unit tested, and now only allows quoted values.
What remains to be done is to only allow `key` and `value` to be proper rust identifiers. We need to figure out if we'd like to spawn a parser here and parse identifiers, or simply sanitize both strings to make sure they do not contain invalid characters.
Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>
This commit separates the `handle_cfg_option()` function in two,
separating the parsing logic from the session logic. The parsing logic
is able to be unit tested, and now only allows quoted values.
932: Add location information to MacroRule r=CohenArthur a=CohenArthur
Closes#930
This PR adds location information to the `MacroRule` structure.
The location is from the beginning of the invokation pattern, so that errors look like so:
```rust
test.rs:2:5: error: ...
2 | ($a:expr, $b:expr) => { a + b }
| ^
```
Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>
933: macrotranscriber: Add location info r=CohenArthur a=CohenArthur
Closes#929
Adds location info to the macro's transcriber. When generating a `MacroRule` error, this PR creates an empty location for the transcriber, since the error function is only called if no fat arrow is present or if there was an error parsing the macro's matcher. Please let me know if this is the expected behavior
Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>
934: macromatch: Add location to abstract MacroMatch class r=philberty a=CohenArthur
Closes#928
This adds location to the all child classes of the `MacroMatch` abstract class. The current locations are as follow, which I believe is what is expected but might be wrong.
```rust
test.rs:2:6: error: macro match fragment
2 | ($a:expr, $b:expr) => { $a + $b };
| ^
test.rs:2:15: error: macro match fragment
2 | ($a:expr, $b:expr) => { $a + $b };
| ^
test.rs:2:5: error: macro matcher
2 | ($a:expr, $b:expr) => { $a + $b };
| ^
test.rs:3:8: error: macro match fragment
3 | ($($i:ident)*) => { $($i)* }
| ^
test.rs:3:17: error: macro match repetition!
3 | ($($i:ident)*) => { $($i)* }
| ^
test.rs:3:5: error: macro matcher
3 | ($($i:ident)*) => { $($i)* }
| ^
```
I think this should be rebased on #932 so that I can remove the FIXME
937: dockerfile: Install cargo-gccrs alongside gccrs r=philberty a=CohenArthur
Closes#826
Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>
931: rust-cfg: Quote option name when erroring out r=philberty a=CohenArthur
Removes a warning generated by `-Wformat-diag`
Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>