MCPcopy Create free account
hub / github.com/aspizu/goboscript / substitute_function_define

Method substitute_function_define

src/pre_processor.rs:229–321  ·  view source on GitHub ↗
(
        &mut self,
        span: &mut Span,
        suppress: &FxHashSet<SmolStr>,
    )

Source from the content-addressed store, hash-verified

227 }
228
229 fn substitute_function_define(
230 &mut self,
231 span: &mut Span,
232 suppress: &FxHashSet<SmolStr>,
233 ) -> Result<bool, Diagnostic> {
234 let macro_name_token = get_token(&self.tokens[*self.i]);
235 let macro_name_span = get_span(&self.tokens[*self.i]);
236 let macro_name: SmolStr = macro_name_token.to_string().into();
237 let Some((function_define_params, function_define_body)) =
238 self.function_defines.get(&*macro_name).cloned()
239 else {
240 return Ok(false);
241 };
242 if suppress.contains(&*macro_name) {
243 return Ok(false);
244 }
245 if get_token(&self.tokens[*self.i + 1]) != &Token::LParen {
246 return Ok(false);
247 }
248 self.remove_token(span);
249 self.remove_token(span);
250 self.expect_no_eof()?;
251 let mut token = get_token(&self.tokens[*self.i]).clone();
252 let mut args = vec![];
253 let mut arg = vec![];
254 if token != Token::RParen {
255 let mut parens = 0;
256 while parens >= 0 {
257 match token {
258 Token::LParen => {
259 parens += 1;
260 arg.push(token);
261 }
262 Token::RParen => {
263 parens -= 1;
264 if parens < 0 {
265 args.push(arg);
266 arg = vec![];
267 } else {
268 arg.push(token);
269 }
270 }
271 Token::Comma if parens == 0 => {
272 args.push(arg);
273 arg = vec![];
274 }
275 _ => {
276 arg.push(token);
277 }
278 }
279 self.remove_token(span);
280 token = get_token(&self.tokens[*self.i]).clone();
281 }
282 } else {
283 self.remove_token(span);
284 }
285 if args.len() != function_define_params.len() {
286 return Err(Diagnostic {

Callers 1

processMethod · 0.80

Calls 6

get_tokenFunction · 0.85
get_spanFunction · 0.85
remove_tokenMethod · 0.80
expect_no_eofMethod · 0.80
processMethod · 0.80
to_stringMethod · 0.45

Tested by

no test coverage detected