-
Notifications
You must be signed in to change notification settings - Fork 5.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implements Iterator trait and for loops. #5557
Conversation
2df9ebd
to
8699d08
Compare
4c3a102
to
6028c9a
Compare
4a8b6a2
to
ee68e1d
Compare
LGTM but @esdrubal can you create the issues you mention in the description before we merge this? |
@IGI-111 I created the issues. |
Any reason why we materialize
|
You may have a continue inside the code_block that would skip the next() call if it is at the end as you suggested. |
We could fix the issue of calling next prematurely by doing something like:
|
That seems much more robust. 👍 |
e334b2c
to
c8fae10
Compare
``` for pattern in iterator { code_block } ``` is desugared into: ``` let mut iterable = iterator; let mut value_opt = iterable.next(); while value_opt.is_some() { let value = value_opt.unwrap(); value_opt = iterable.next(); code_block } ```
Improved generated desugared AST corrresponds to: ``` let mut iterable = iterator; while true { let value_opt = iterable.next(); if value_opt.is_none() { break; } let value = value_opt.unwrap(); code_block } ```
Updated desugaring code to the better version. |
## Description This implements an Iterator trait in std-lib, and adds iter() to Vec. This also adds parsing and desugaring of for loops. ``` for pattern in iterator { code_block } ``` is desugared into: ``` let mut iterable = iterator; while true { let value_opt = iterable.next(); if value_opt.is_none() { break; } let value = value_opt.unwrap(); code_block } ``` This also adds for loops documentation to the control flow docs. We still have to fix this issues: - #5567 - #5568 - #5570 - #5571 Closes #145 ## Checklist - [x] I have linked to any relevant issues. - [x] I have commented my code, particularly in hard-to-understand areas. - [x] I have updated the documentation where relevant (API docs, the reference, and the Sway book). - [x] I have added tests that prove my fix is effective or that my feature works. - [x] I have added (or requested a maintainer to add) the necessary `Breaking*` or `New Feature` labels where relevant. - [x] I have done my best to ensure that my PR adheres to [the Fuel Labs Code Review Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md). - [x] I have requested a review from the relevant team or maintainers.
## Description An issue was reported by @sdankel on #5477 caused by #5557. A segmentation fault would occur when the for loop handling was performed inside the match. This would occur even when that part of the code was not called. Looks like a weird rust issue. ## Checklist - [ ] I have linked to any relevant issues. - [x] I have commented my code, particularly in hard-to-understand areas. - [ ] I have updated the documentation where relevant (API docs, the reference, and the Sway book). - [ ] I have added tests that prove my fix is effective or that my feature works. - [x] I have added (or requested a maintainer to add) the necessary `Breaking*` or `New Feature` labels where relevant. - [x] I have done my best to ensure that my PR adheres to [the Fuel Labs Code Review Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md). - [x] I have requested a review from the relevant team or maintainers. Co-authored-by: Igor Rončević <ironcev@hotmail.com>
Description
This implements an Iterator trait in std-lib, and adds iter() to Vec.
This also adds parsing and desugaring of for loops.
is desugared into:
This also adds for loops documentation to the control flow docs.
We still have to fix this issues:
iterator.into_iter()
on failure #55680..10
#5570Closes #145
Checklist
Breaking*
orNew Feature
labels where relevant.