MCPcopy Create free account
hub / github.com/amber-lang/amber / parse

Method parse

src/modules/function/invocation.rs:62–112  ·  view source on GitHub ↗
(&mut self, meta: &mut ParserMetadata)

Source from the content-addressed store, hash-verified

60 }
61
62 fn parse(&mut self, meta: &mut ParserMetadata) -> SyntaxResult {
63 syntax(meta, &mut self.modifier)?;
64 self.modifier.use_modifiers(meta, |_this, meta| {
65 // Get the function name and store token for error reporting
66 let tok = meta.get_current_token();
67 if let Some(ref tok) = tok {
68 (self.line, self.col) = tok.pos;
69 }
70 self.name = variable(meta, variable_name_extensions())?;
71 self.name_tok = tok.clone();
72 self.failure_handler.set_function_name(self.name.clone());
73
74 // Parse arguments syntax
75 token(meta, "(")?;
76 loop {
77 // Skip comments and newlines
78 if token_by(meta, |token| {
79 token.starts_with("//") || token.starts_with('\n')
80 })
81 .is_ok()
82 {
83 continue;
84 }
85 if token(meta, ")").is_ok() {
86 break;
87 }
88 let mut arg = Expr::new();
89 syntax(meta, &mut arg)?;
90 self.args.push(arg);
91 match token(meta, ")") {
92 Ok(_) => break,
93 Err(_) => token(meta, ",")?,
94 };
95 }
96
97 // Store position for later error reporting
98 self.failure_handler
99 .set_position(PositionInfo::from_between_tokens(
100 meta,
101 tok.clone(),
102 meta.get_current_token(),
103 ));
104
105 // Try to parse the failed block if present (optional in parse phase)
106 if let Err(Failure::Loud(msg)) = syntax(meta, &mut self.failure_handler) {
107 return Err(Failure::Loud(msg));
108 }
109
110 Ok(())
111 })
112 }
113}
114
115impl TypeCheckModule for FunctionInvocation {

Callers

nothing calls this directly

Calls 4

variable_name_extensionsFunction · 0.85
use_modifiersMethod · 0.80
set_function_nameMethod · 0.80
set_positionMethod · 0.80

Tested by

no test coverage detected