syn_solidity/stmt/
emit.rs1use crate::{kw, Expr, Spanned};
2use proc_macro2::Span;
3use std::fmt;
4use syn::{
5 parse::{Parse, ParseStream},
6 Result, Token,
7};
8
9#[derive(Clone)]
14pub struct StmtEmit {
15 pub emit_token: kw::emit,
16 pub expr: Expr,
17 pub semi_token: Token![;],
19}
20
21impl fmt::Debug for StmtEmit {
22 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
23 f.debug_struct("StmtEmit")
24 .field("expr", &self.expr)
25 .finish()
27 }
28}
29
30impl Parse for StmtEmit {
31 fn parse(input: ParseStream<'_>) -> Result<Self> {
32 Ok(Self {
33 emit_token: input.parse()?,
34 expr: input.parse()?,
35 semi_token: input.parse()?,
37 })
38 }
39}
40
41impl Spanned for StmtEmit {
42 fn span(&self) -> Span {
43 let span = self.emit_token.span;
44 span.join(self.semi_token.span).unwrap_or(span)
45 }
46
47 fn set_span(&mut self, span: Span) {
48 self.emit_token.span = span;
49 self.semi_token.span = span;
50 }
51}