MCPcopy Create free account
hub / github.com/PLSysSec/wave / parse

Method parse

tools/fuzz-gen/src/parse_closure_macro.rs:10–42  ·  view source on GitHub ↗
(input: ParseStream)

Source from the content-addressed store, hash-verified

8
9impl Parse for ClosureWithSpec {
10 fn parse(input: ParseStream) -> syn::Result<Self> {
11 let mut requires: Vec<syn::Expr> = vec! [];
12 let mut ensures: Vec<syn::Expr> = vec! [];
13 let mut cl: Option<syn::ExprClosure> = None;
14
15 while !input.is_empty() {
16 if input.peek(syn::Ident) {
17 let id: syn::Ident = input.parse()?;
18 let expr: syn::Expr = input.parse()?;
19 input.parse::<syn::Token![,]>()?;
20
21 if id == "requires" {
22 requires.push(expr);
23 } else if id == "ensures" {
24 ensures.push(expr);
25 } else {
26 return Err(syn::Error::new(id.span(), "invalid closure specification"));
27 }
28 } else {
29 cl = Some(input.parse()?);
30 }
31 }
32
33 if cl.is_none() {
34 return Err(syn::Error::new(input.span(), "closure specification without closure"));
35 }
36
37 Ok(ClosureWithSpec {
38 pres: requires,
39 posts: ensures,
40 cl: cl.unwrap()
41 })
42 }
43}

Callers 1

process_fileFunction · 0.45

Calls 2

is_emptyMethod · 0.80
pushMethod · 0.45

Tested by

no test coverage detected