extern statement

This commit is contained in:
2025-11-16 13:30:07 +01:00
parent 552a404d73
commit 5a41163ca1
6 changed files with 38 additions and 29 deletions

View File

@@ -87,6 +87,7 @@ impl Analyzer {
}
Stmt::Break => {}
Stmt::Continue => {}
Stmt::Extern(_) => {}
}
Ok(())
}

View File

@@ -281,6 +281,9 @@ _builtin_set64:
// TODO: skips incrementing when used in a for loop
emit!(&mut self.output, " jmp {}", env.loop_begin_label);
}
Stmt::Extern(name) => {
emit!(&mut self.output, " extern {}", name.lexeme);
}
}
Ok(())
}

View File

@@ -39,6 +39,7 @@ pub enum Stmt {
Return(Expr),
Break,
Continue,
Extern(Token),
}
#[derive(Debug, Clone)]
@@ -198,6 +199,10 @@ impl Parser {
Ok(Stmt::Break)
} else if self.match_token(&[TokenType::KeywordContinue]) {
Ok(Stmt::Continue)
} else if self.match_token(&[TokenType::KeywordExtern]) {
Ok(Stmt::Extern(
self.consume(TokenType::Identifier, "expected extern name")?,
))
} else {
Ok(Stmt::Expression(self.expression()?))
}

View File

@@ -47,6 +47,7 @@ pub enum TokenType {
KeywordReturn,
KeywordBreak,
KeywordContinue,
KeywordExtern,
Indent,
Dedent,
@@ -334,6 +335,7 @@ impl Tokenizer {
"return" => TokenType::KeywordReturn,
"break" => TokenType::KeywordBreak,
"continue" => TokenType::KeywordContinue,
"extern" => TokenType::KeywordExtern,
"true" => TokenType::True,
"false" => TokenType::False,
_ => TokenType::Identifier,