示例#1
0
    public LoxFunction Bind(LoxInstance instance)
    {
        Environment environment = new Environment(Closure);

        environment.Define("this", instance);
        return(new LoxFunction(Declaration, environment, IsInitializer));
    }
示例#2
0
        public LoxFunctionCallable Bind(LoxInstance instance)
        {
            var binding = new LoxEnvironment(_closure);

            binding.Bind(instance);
            return(new LoxFunctionCallable(_functionStmt, binding, _isInitializer));
        }
示例#3
0
        public LoxFunction Bind(LoxInstance instance)
        {
            CSLoxEnvironment environment = new CSLoxEnvironment(this.Closure);

            environment.Define("this", instance);
            // redelcared this function with the correct constext AT RUNTIME.
            return(new LoxFunction(functionDelcaration, environment, IsInitialiser));
        }
示例#4
0
    public object Call(Interpreter interpreter, List <object> arguments)
    {
        LoxInstance instance    = new LoxInstance(this);
        LoxFunction initializer = FindMethod("init");

        if (initializer != null)
        {
            initializer.Bind(instance).Call(interpreter, arguments);
        }

        return(instance);
    }
示例#5
0
    public object VisitSuperExpr(Expr.Super expr)
    {
        int         distance   = Locals[expr];
        LoxClass    superclass = (LoxClass)Environment.GetAt(distance, "super");
        LoxInstance instance   = (LoxInstance)Environment.GetAt(
            distance - 1, "this");
        LoxFunction method = superclass.FindMethod(expr.Method.Lexeme);

        if (method == null)
        {
            throw new RuntimeException(expr.Method,
                                       $"Undefined property '{expr.Method.Lexeme}'.");
        }

        return(method.Bind(instance));
    }
示例#6
0
 public void Bind(LoxInstance instance)
 {
     _state["this"] = instance;
 }