public void VisitSuperExpr(SuperExpr expr) { if (currentClass == ClassType.None) { Lox.Error(expr.Keyword, "Cannot use 'super' outside of class."); } else if (currentClass == ClassType.Class) { Lox.Error(expr.Keyword, "Cannot use 'super' in a class with no superclass."); } ResolveLocal(expr, expr.Keyword); }
public object VisitSuperExpr(SuperExpr expr) { int distance = locals[expr]; var superClass = (LoxClass)environment.GetAt(distance, "super"); var obj = (LoxInstance)environment.GetAt(distance - 1, "this"); var method = superClass.FindMethod(obj, expr.Method.Lexeme); if (method == null) { throw new RuntimeError(expr.Method, "Undefined property '" + expr.Method.Lexeme + "'."); } return(method); }
public string VisitSuperExpr(SuperExpr expr) { throw new System.NotImplementedException(); }