Commit Graph

192725 Commits

Author SHA1 Message Date
Arthur Cohen 0b46175fb8 macro: Add source containing builtin definitions
Co-authored-by: philberty <philip.herron@embecosm.com>
2022-02-23 14:36:11 +01:00
bors[bot] 10de9cf4f3
Merge #956
956: Substitute repetitions r=CohenArthur a=CohenArthur

Needs #955 

This PR splits up the `substitute_tokens` function into multiple smaller functions. Still a draft until I can get repetitions working.

Closes #960 
Closes #961 

Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>
2022-02-23 09:17:08 +00:00
Arthur Cohen 92a62562c8 substitute_repetition: Correctly insert sub-fragments 2022-02-23 10:13:06 +01:00
Arthur Cohen 1f546e5e3a match_repetition: Set the correct amount of matches for each fragment
Co-authored-by: philberty <philip.herron@embecosm.com>
2022-02-23 10:13:06 +01:00
bors[bot] e0f261f1ae
Merge #953
953: Refactor lang item mappings r=philberty a=philberty

This refactors how we find our lang items so that during HIR lowering
we have a generic outer attributes handler on Items. The old code only
done lang item mappings during the type check pass and assumed all
lang items are Traits which is not the case. To implement slices range
syntax actually map to structs within libcore/ops/range.rs which have
lang items on structs. This means we can have lang items on any Item.

Co-authored-by: Philip Herron <philip.herron@embecosm.com>
2022-02-22 16:25:07 +00:00
Philip Herron 865aa0aeb5 Add new Builtin attributes mappings
This class keeps track of all known builtin attributes and specifies which
pass they are handled at. This replaces the checks we added for outer
attributes during hir lowering making it a more maintainable data
structure.
2022-02-22 16:19:30 +00:00
Philip Herron 9bdc5462f2 Add mappings for range lang items 2022-02-22 15:17:36 +00:00
Philip Herron bede822298 Refactor mapping any lang items to be done during HIR lowering
This extracts a common way of handling outer attributes on Items to improve
error handling and make lang item mappings more generic.
2022-02-22 15:17:36 +00:00
Philip Herron 87aeea2583 Refactor lang item mappings enum into its own header 2022-02-22 15:17:36 +00:00
Arthur Cohen 6db51e3936 subs_repetition: Add simple test cases 2022-02-22 12:06:27 +01:00
Arthur Cohen ded1aca902 substitute_repetition: Substitute repetitions properly 2022-02-22 12:06:27 +01:00
Arthur Cohen 143aad62e1 substitute_repetition: Add parsing of repetition pattern 2022-02-22 12:05:58 +01:00
Arthur Cohen ae1f91a698 transcribe: Move substitute_metavar in its own function 2022-02-22 11:57:19 +01:00
bors[bot] 265c223766
Merge #964 #965
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>
2022-02-22 10:05:34 +00:00
bors[bot] 133beb6d0f
Merge #955
955: matched_fragment: Track and set fragment match amount r=CohenArthur a=CohenArthur



Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>
2022-02-22 09:39:25 +00:00
Arthur Cohen 91aca2c19e matched_fragment: Track and set fragment match amount
Co-authored-by: philberty <philip.herron@embecosm.com>
2022-02-22 10:38:39 +01:00
Arthur Cohen 4e19c2f792 macro-invoc-lexer: Split implementation in its own file 2022-02-21 17:27:56 +01:00
Arthur Cohen 9b36f95366 testsuite: Add -fdump-tree-gimple to inline1.rs 2022-02-21 17:01:10 +01:00
Arthur Cohen 737873ca87 ci: Do not allow unresolved test cases 2022-02-21 16:39:06 +01:00
bors[bot] 796465596f
Merge #950
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>
2022-02-20 14:34:37 +00:00
bors[bot] 4e096b1f14
Merge #951
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>
2022-02-20 14:03:54 +00:00
Arthur Cohen d0d4dcfdb4 macro: Add repetition execution test cases 2022-02-18 16:46:10 +01:00
Arthur Cohen af789a7079 macros: Add test cases for repetitions 2022-02-18 16:46:10 +01:00
Arthur Cohen ad7e4bb6f8 macro-repetitions: Match repetitions properly 2022-02-18 16:46:10 +01:00
bors[bot] 31387e7609
Merge #944
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>
2022-02-18 14:43:08 +00:00
Philip Herron 3dd4ce76a6 Add name resolution to range expressions 2022-02-18 13:26:24 +00:00
Philip Herron 755d0e5adf Refactor AST::ResolveExpr into its own cc file 2022-02-18 13:07:13 +00:00
Philip Herron de08987dc7 Add name resolution to AST::SliceType 2022-02-18 12:55:14 +00:00
Philip Herron 78cdc6ca31 Refactor type name resolution into their own .cc file 2022-02-18 12:46:44 +00:00
bors[bot] 425905b49a
Merge #942
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>
2022-02-18 11:50:32 +00:00
Arthur Cohen 472c0a3057 macro-repetition: Rename enum variants to better reflect repetition kind 2022-02-18 11:18:03 +01:00
Arthur Cohen 5f35a8c637 parser: Add `clear_errors()` method 2022-02-18 09:19:04 +01:00
bors[bot] fbe22e8768
Merge #940
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>
2022-02-18 08:14:30 +00:00
Arthur Cohen 0e15b89839 struct pattern: Add location on struct name 2022-02-18 09:10:55 +01:00
Arthur Cohen 425ebda243 type-path-fn: Add location info on start of Fn token 2022-02-18 09:10:52 +01:00
Arthur Cohen ef06769781 path-id: Add location info on path identifier 2022-02-18 09:08:07 +01:00
Arthur Cohen 9e524a7f5a closure-arg: Add location info on arg name 2022-02-18 09:08:07 +01:00
Arthur Cohen 63538444fb struct-base: Add location info on `..` token 2022-02-18 09:08:07 +01:00
Arthur Cohen d120c9db18 array-copy-init: Add location info 2022-02-18 09:08:07 +01:00
Arthur Cohen c6daece647 array-values: Add location info 2022-02-18 09:08:07 +01:00
Arthur Cohen 205a9cbf9e fn-arg: Add location on parameter name 2022-02-18 09:08:07 +01:00
bors[bot] 9fb06d66ce
Merge #938
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>
2022-02-17 17:02:43 +00:00
M V V S Manoj Kumar ee4131396e Removed Lambda Function within AST::PathPattern
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>
2022-02-17 22:11:23 +05:30
Philip Herron 37415eec77 Semicolon based macro invocation
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.
2022-02-17 16:41:15 +00:00
Philip Herron 4c70d7ec77 Support block expressions within macros
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.
2022-02-17 13:28:25 +00:00
Philip Herron 19c5dde80f When we expand a macro we must visit it to ensure any cfg expansions or recursive macro expansion is required 2022-02-17 13:28:25 +00:00
Philip Herron 2c03f34027 Add initial support for macro expansion
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
2022-02-17 13:28:25 +00:00
Philip Herron ef626302f7 Add name-resolution helpers for looking up macros 2022-02-17 13:28:24 +00:00
Philip Herron a026c166f0 Add mappings helpers for looking up macros definitions 2022-02-17 13:28:24 +00:00
Philip Herron 864df7901c Add missing copyright header to lexer header 2022-02-17 13:28:24 +00:00