[jlox] Resolve superclasses

This commit is contained in:
ctsk
2022-10-11 12:12:32 +02:00
parent 6d20bb63c2
commit e68b3036f7

View File

@@ -1,10 +1,7 @@
package xyz.ctsk.lox; package xyz.ctsk.lox;
import java.util.HashMap; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.Stack;
public class Resolver implements Expr.Visitor<Void>, Stmt.Visitor<Void> { public class Resolver implements Expr.Visitor<Void>, Stmt.Visitor<Void> {
private final Interpreter interpreter; private final Interpreter interpreter;
@@ -91,6 +88,14 @@ public class Resolver implements Expr.Visitor<Void>, Stmt.Visitor<Void> {
currentClass = ClassType.CLASS; currentClass = ClassType.CLASS;
declare(stmt.name()); declare(stmt.name());
define(stmt.name()); define(stmt.name());
if (stmt.superclass() != null) {
if (stmt.name().lexeme().equals(stmt.superclass().name().lexeme())) {
Lox.error(stmt.superclass().name(), "A class can't inherit from itself.");
}
resolve(stmt.superclass());
}
beginScope(); beginScope();
scopes.peek().put("this", true); scopes.peek().put("this", true);