syn_solidity/yul/stmt/
for.rs1use crate::{Spanned, YulBlock, YulExpr};
2use proc_macro2::Span;
3use std::fmt;
4use syn::{
5 parse::{Parse, ParseStream},
6 Result, Token,
7};
8
9#[derive(Clone)]
15pub struct YulFor {
16 for_token: Token![for],
17 initialization: YulBlock,
18 condition: YulExpr,
19 post_iteration: YulBlock,
20 body: YulBlock,
21}
22
23impl Parse for YulFor {
24 fn parse(input: ParseStream<'_>) -> Result<Self> {
25 Ok(Self {
26 for_token: input.parse()?,
27 initialization: input.parse()?,
28 condition: input.parse()?,
29 post_iteration: input.parse()?,
30 body: input.parse()?,
31 })
32 }
33}
34
35impl Spanned for YulFor {
36 fn span(&self) -> Span {
37 let span = self.for_token.span();
38 span.join(self.body.span()).unwrap_or(span)
39 }
40
41 fn set_span(&mut self, span: Span) {
42 self.for_token.set_span(span);
43 self.initialization.set_span(span);
44 self.condition.set_span(span);
45 self.post_iteration.set_span(span);
46 self.body.set_span(span);
47 }
48}
49
50impl fmt::Debug for YulFor {
51 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
52 f.debug_struct("YulFor")
53 .field("initialization", &self.initialization)
54 .field("condition", &self.condition)
55 .field("post_iteration", &self.post_iteration)
56 .field("body", &self.body)
57 .finish()
58 }
59}