Skip to content

Commit 443f22d

Browse files
committed
fix: parsing & substitution of zero-parameter function-like macros
1 parent c12e988 commit 443f22d

File tree

1 file changed

+24
-20
lines changed

1 file changed

+24
-20
lines changed

src/pre_processor.rs

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ impl<'a, 'b> PreProcessor<'a, 'b> {
140140
self.expect_no_eof()?;
141141
let mut name = get_token(&self.tokens[*self.i]).clone();
142142
*self.i -= 1;
143-
if !matches!(name, Token::Name(_) | Token::LParen) {
143+
if !matches!(name, Token::Name(_) | Token::RParen) {
144144
return Ok(false);
145145
}
146146
self.remove_token(span);
@@ -251,32 +251,36 @@ impl<'a, 'b> PreProcessor<'a, 'b> {
251251
let mut token = get_token(&self.tokens[*self.i]).clone();
252252
let mut args = vec![];
253253
let mut arg = vec![];
254-
let mut parens = 0;
255-
while parens >= 0 {
256-
match token {
257-
Token::LParen => {
258-
parens += 1;
259-
arg.push(token);
260-
}
261-
Token::RParen => {
262-
parens -= 1;
263-
if parens < 0 {
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 => {
264272
args.push(arg);
265273
arg = vec![];
266-
} else {
274+
}
275+
_ => {
267276
arg.push(token);
268277
}
269278
}
270-
Token::Comma if parens == 0 => {
271-
args.push(arg);
272-
arg = vec![];
273-
}
274-
_ => {
275-
arg.push(token);
276-
}
279+
self.remove_token(span);
280+
token = get_token(&self.tokens[*self.i]).clone();
277281
}
282+
} else {
278283
self.remove_token(span);
279-
token = get_token(&self.tokens[*self.i]).clone();
280284
}
281285
if args.len() != function_define_params.len() {
282286
return Err(Diagnostic {

0 commit comments

Comments
 (0)