remove enums
This commit is contained in:
@@ -514,9 +514,6 @@ _builtin_environ:
|
||||
Stmt::Struct { .. } => {
|
||||
// handled in SymbolTable
|
||||
}
|
||||
Stmt::Enum { .. } => {
|
||||
// handled in SymbolTable
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -77,10 +77,6 @@ pub enum Stmt {
|
||||
name: Token,
|
||||
fields: Vec<Param>,
|
||||
},
|
||||
Enum {
|
||||
name: Token,
|
||||
variants: Vec<Token>,
|
||||
},
|
||||
}
|
||||
|
||||
pub static NEXT_EXPR_ID: AtomicUsize = AtomicUsize::new(0);
|
||||
@@ -195,9 +191,6 @@ impl Parser {
|
||||
if self.match_token(&[TokenType::KeywordStruct]) {
|
||||
return self.struct_declaration();
|
||||
}
|
||||
if self.match_token(&[TokenType::KeywordEnum]) {
|
||||
return self.enum_declaration();
|
||||
}
|
||||
return error!(
|
||||
self.peek().loc,
|
||||
"statements not allowed outside function body"
|
||||
@@ -281,21 +274,6 @@ impl Parser {
|
||||
Ok(Stmt::Struct { name, fields })
|
||||
}
|
||||
|
||||
fn enum_declaration(&mut self) -> Result<Stmt, ZernError> {
|
||||
let name = self.consume(TokenType::Identifier, "expected enum name")?;
|
||||
|
||||
self.consume(TokenType::Indent, "expected indent after enum name")?;
|
||||
|
||||
let mut variants = vec![];
|
||||
while !self.eof() && !self.check(&TokenType::Dedent) {
|
||||
variants.push(self.consume(TokenType::Identifier, "expected variant name")?);
|
||||
}
|
||||
|
||||
self.consume(TokenType::Dedent, "expected dedent after enum variants")?;
|
||||
|
||||
Ok(Stmt::Enum { name, variants })
|
||||
}
|
||||
|
||||
fn const_declaration(&mut self) -> Result<Stmt, ZernError> {
|
||||
let name = self.consume(TokenType::Identifier, "expected const name")?;
|
||||
self.consume(TokenType::Equal, "expected '=' after const name")?;
|
||||
|
||||
@@ -144,16 +144,6 @@ impl SymbolTable {
|
||||
|
||||
self.structs.insert(name.lexeme.clone(), fields_map);
|
||||
}
|
||||
Stmt::Enum { name, variants } => {
|
||||
// TODO: distinct enum types
|
||||
for (i, v) in variants.iter().enumerate() {
|
||||
let variant = format!("{}.{}", name.lexeme, v.lexeme);
|
||||
if self.is_name_defined(&variant) {
|
||||
return error!(name.loc, format!("tried to redefine '{}'", variant));
|
||||
}
|
||||
self.constants.insert(variant, i as i64);
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
Ok(())
|
||||
|
||||
@@ -58,7 +58,6 @@ pub enum TokenType {
|
||||
KeywordStruct,
|
||||
KeywordNew,
|
||||
KeywordAs,
|
||||
KeywordEnum,
|
||||
|
||||
Indent,
|
||||
Dedent,
|
||||
@@ -395,7 +394,6 @@ impl Tokenizer {
|
||||
"struct" => TokenType::KeywordStruct,
|
||||
"new" => TokenType::KeywordNew,
|
||||
"as" => TokenType::KeywordAs,
|
||||
"enum" => TokenType::KeywordEnum,
|
||||
"true" => TokenType::True,
|
||||
"false" => TokenType::False,
|
||||
_ => TokenType::Identifier,
|
||||
|
||||
@@ -361,7 +361,6 @@ impl<'a> TypeChecker<'a> {
|
||||
}
|
||||
}
|
||||
}
|
||||
Stmt::Enum { .. } => {}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user