MCPcopy Create free account
hub / github.com/bytecodealliance/wasmtime / parse_spec

Method parse_spec

cranelift/isle/isle/src/parser.rs:399–447  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

397 }
398
399 fn parse_spec(&mut self) -> Result<Spec> {
400 let pos = self.pos();
401 self.expect_lparen()?; // term with args: (spec (<term> <args>) (provide ...) ...)
402 let term = self.parse_ident()?;
403 let mut args = vec![];
404 while !self.is_rparen() {
405 args.push(self.parse_ident()?);
406 }
407 self.expect_rparen()?; // end term with args
408
409 self.expect_lparen()?; // provide
410 if !self.eat_sym_str("provide")? {
411 return Err(self.error(
412 pos,
413 "Invalid spec: expected (spec (<term> <args>) (provide ...) ...)".to_string(),
414 ));
415 };
416 let mut provides = vec![];
417 while !self.is_rparen() {
418 provides.push(self.parse_spec_expr()?);
419 }
420 self.expect_rparen()?; // end provide
421
422 let requires = if self.is_lparen() {
423 self.expect_lparen()?;
424 if !self.eat_sym_str("require")? {
425 return Err(self.error(
426 pos,
427 "Invalid spec: expected (spec (<term> <args>) (provide ...) (require ...))"
428 .to_string(),
429 ));
430 }
431 let mut require = vec![];
432 while !self.is_rparen() {
433 require.push(self.parse_spec_expr()?);
434 }
435 self.expect_rparen()?; // end provide
436 require
437 } else {
438 vec![]
439 };
440
441 Ok(Spec {
442 term,
443 args,
444 provides,
445 requires,
446 })
447 }
448
449 fn parse_spec_expr(&mut self) -> Result<SpecExpr> {
450 let pos = self.pos();

Callers 1

parse_defMethod · 0.80

Calls 12

OkFunction · 0.85
expect_lparenMethod · 0.80
parse_identMethod · 0.80
is_rparenMethod · 0.80
expect_rparenMethod · 0.80
eat_sym_strMethod · 0.80
parse_spec_exprMethod · 0.80
is_lparenMethod · 0.80
posMethod · 0.45
pushMethod · 0.45
errorMethod · 0.45
to_stringMethod · 0.45

Tested by

no test coverage detected