extern statement
This commit is contained in:
@@ -87,6 +87,7 @@ impl Analyzer {
|
||||
}
|
||||
Stmt::Break => {}
|
||||
Stmt::Continue => {}
|
||||
Stmt::Extern(_) => {}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
|
||||
@@ -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()?))
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user