AST - Store superclass as a var expr
This commit is contained in:
parent
33c28db780
commit
6b384cda5d
3 changed files with 8 additions and 3 deletions
|
@ -38,7 +38,7 @@ pub struct ClassDecl {
|
|||
/// The token that represents the name of the class.
|
||||
pub name: Token,
|
||||
/// The token indicating the name of the parent class, if any.
|
||||
pub superclass: Option<Token>,
|
||||
pub superclass: Option<VariableExpr>,
|
||||
/// The list of class members.
|
||||
pub members: Vec<ClassMemberDecl>,
|
||||
}
|
||||
|
|
|
@ -97,7 +97,9 @@ fn dump_statement(dumper: &mut Dumper, stmt: &StmtNode) {
|
|||
StmtNode::ClassDecl(decl) => {
|
||||
dumper.add_line(format!("class {}", decl.name.lexeme));
|
||||
if let Some(superclass) = &decl.superclass {
|
||||
dumper.current_line().push_str(&format!(" < {}", superclass.lexeme));
|
||||
dumper
|
||||
.current_line()
|
||||
.push_str(&format!(" < {}", superclass.token.lexeme));
|
||||
}
|
||||
dumper.current_line().push_str(" {");
|
||||
if !decl.members.is_empty() {
|
||||
|
|
|
@ -227,7 +227,10 @@ impl Parser {
|
|||
let name = self.consume_identifier("expected class name")?;
|
||||
let superclass = match self.expect(&[TokenType::Less]) {
|
||||
None => None,
|
||||
Some(_) => Some(self.consume_identifier("expected superclass name")?),
|
||||
Some(_) => Some(VariableExpr {
|
||||
token: self.consume_identifier("expected superclass name")?.clone(),
|
||||
id: self.make_id(),
|
||||
}),
|
||||
};
|
||||
|
||||
self.consume(&TokenType::LeftBrace, "'{' expected")?;
|
||||
|
|
Loading…
Reference in a new issue