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

Method substitute_concat

src/pre_processor.rs:336–387  ·  view source on GitHub ↗
(&mut self, span: &mut Span)

Source from the content-addressed store, hash-verified

334 }
335
336 fn substitute_concat(&mut self, span: &mut Span) -> Result<bool, Diagnostic> {
337 let Token::Name(macro_name) = get_token(&self.tokens[*self.i]) else {
338 return Ok(false);
339 };
340 let macro_name_span = get_span(&self.tokens[*self.i]);
341 if macro_name != "CONCAT" {
342 return Ok(false);
343 }
344 if self
345 .tokens
346 .get(*self.i + 1)
347 .is_none_or(|token| get_token(token) != &Token::LParen)
348 {
349 return Ok(false);
350 }
351 if self
352 .tokens
353 .get(*self.i + 3)
354 .is_none_or(|token| get_token(token) != &Token::Comma)
355 {
356 return Ok(false);
357 }
358 if self
359 .tokens
360 .get(*self.i + 5)
361 .is_none_or(|token| get_token(token) != &Token::RParen)
362 {
363 return Ok(false);
364 }
365 let Some(Token::Name(left)) = self.tokens.get(*self.i + 2).map(get_token).cloned() else {
366 return Ok(false);
367 };
368 let Some(Token::Name(right)) = self.tokens.get(*self.i + 4).map(get_token).cloned() else {
369 return Ok(false);
370 };
371 self.remove_token(span);
372 self.remove_token(span);
373 self.remove_token(span);
374 self.remove_token(span);
375 self.remove_token(span);
376 self.remove_token(span);
377 self.tokens.insert(
378 *self.i,
379 (
380 macro_name_span.start,
381 Token::Name(format!("{}{}", left, right).into()),
382 macro_name_span.end,
383 ),
384 );
385 span.end += 1;
386 Ok(true)
387 }
388}

Callers 1

processMethod · 0.80

Calls 4

get_tokenFunction · 0.85
get_spanFunction · 0.85
NameEnum · 0.85
remove_tokenMethod · 0.80

Tested by

no test coverage detected