Пример #1
0
 public IEnumerable <string> VisitVarStmt(Stmt.Var stmt)
 {
     yield return(stmt.Initializer.Match(
                      some: init => $"var {stmt.Name} = {PrintExpr(init)}",
                      none: () => $"var {stmt.Name};"
                      ));
 }
Пример #2
0
 public LoxVoid VisitVarStmt(Stmt.Var stmt)
 {
     Declare(stmt.Name);
     stmt.Initializer.MatchSome(init => Resolve(init));
     Define(stmt.Name);
     return(null);
 }
Пример #3
0
        public override VoidObject VisitVarStmt(Stmt.Var stmt)
        {
            bool sanityCheckFailed = false;

            // Sanity check the input to ensure that we don't get NullReferenceExceptions later on
            if (stmt.TypeReference == null)
            {
                TypeValidationErrorCallback(new TypeValidationError(
                                                stmt.Name,
                                                $"Internal compiler error: {stmt.Name.Lexeme} is missing a TypeReference"
                                                ));

                sanityCheckFailed = true;
            }

            if (stmt.Initializer != null && !stmt.Initializer.TypeReference.IsResolved)
            {
                TypeValidationErrorCallback(new TypeValidationError(
                                                stmt.Name,
                                                $"Internal compiler error: var {stmt.Name.Lexeme} initializer {stmt.Initializer} inference has not been attempted"
                                                ));

                sanityCheckFailed = true;
            }

            if (sanityCheckFailed)
            {
                return(VoidObject.Void);
            }

            if (stmt.TypeReference !.IsResolved)
            {
                if (stmt.Initializer != null)
                {
                    if (stmt.TypeReference.IsNullObject && stmt.Initializer.TypeReference.IsNullObject)
                    {
                        // TODO: Use stmt.Initializer.Token here instead of stmt.name, #189
                        TypeValidationErrorCallback(new TypeValidationError(
                                                        stmt.Name,
                                                        "Cannot assign null to an implicitly typed local variable"
                                                        ));
                    }
                    else if (!TypeCoercer.CanBeCoercedInto(stmt.TypeReference, stmt.Initializer.TypeReference, ((stmt.Initializer as Expr.Literal)?.Value as INumericLiteral)?.BitsUsed))
                    {
                        // TODO: Use stmt.Initializer.Token here instead of stmt.name, #189
                        TypeValidationErrorCallback(new TypeValidationError(
                                                        stmt.Name,
                                                        $"Cannot assign {stmt.Initializer.TypeReference.ClrType.ToTypeKeyword()} to {stmt.TypeReference.ClrType.ToTypeKeyword()} variable"
                                                        ));
                    }
                    else if (stmt.Initializer.TypeReference.IsNullObject)
                    {
                        // TODO: Use stmt.Initializer.Token here instead of stmt.name, #189
                        compilerWarningCallback(new CompilerWarning("Initializing variable to null detected", stmt.Name, WarningType.NULL_USAGE));
                    }
                }
            }
Пример #4
0
        public LoxVoid VisitVarStmt(Stmt.Var stmt)
        {
            stmt.Initializer.Match(
                some: init => _environment.Define(stmt.Name.Lexeme, Evalutate(init)),
                none: () => _environment.Declare(stmt.Name.Lexeme)
                );

            return(null);
        }
Пример #5
0
 public Unit VisitVarStmt(Stmt.Var stmt)
 {
     Declare(stmt.Name);
     if (stmt.Initializer != null)
     {
         Resolve(stmt.Initializer);
     }
     Define(stmt.Name);
     return(new Unit());
 }
Пример #6
0
        public object VisitVarStmt(Stmt.Var stmt, object options)
        {
            string typestr = (string)stmt.stmtType.Accept(this, null);

            if (stmt.initialiser == null)
            {
                return(Parenthesize2(typestr, stmt.token));
            }
            return(Parenthesize2(typestr, stmt.token, "=", stmt.initialiser));
        }
Пример #7
0
 public object visitVarStmt(Stmt.Var stmt)
 {
     declare(stmt.name);
     if (stmt.initializer != null)
     {
         resolve(stmt.initializer);
     }
     define(stmt.name);
     return(null);
 }
Пример #8
0
        public object VisitVarStmt(Stmt.Var stmt)
        {
            Declare(stmt.name);
            if (stmt.initializer != null)
            {
                Resolve(stmt.initializer);
            }

            Define(stmt.name);
            return(null);
        }
Пример #9
0
 public string VisitVarStmt(Stmt.Var stmt)
 {
     if (!stmt.HasInitializer)
     {
         return(Parenthesize2("var", stmt.Name));
     }
     else
     {
         return(Parenthesize2("var", stmt.Name, "=", stmt.Initializer));
     }
 }
Пример #10
0
    public object VisitVarStmt(Stmt.Var stmt)
    {
        object value = null;

        if (stmt.Initializer != null)
        {
            value = Evaluate(stmt.Initializer);
        }

        Environment.Define(stmt.Name.Lexeme, value);
        return(null);
    }
Пример #11
0
        public Stmt VisitVarStmt(Stmt.Var stmt)
        {
            object value = null;

            if (stmt.isInitalizedVar != null)
            {
                value = Evaluate(stmt.exprInitializer);
            }

            environment.Define(stmt.name.ToString(), value);
            return(null);
        }
Пример #12
0
        public object visitVariableStmt(Stmt.Var expr)
        {
            object value = null;

            if (expr.Initializer != null)
            {
                value = evaluate(expr.Initializer);
            }

            environment.define(expr.Name.Lexeme, value);
            return(null);
        }
Пример #13
0
        public object visitVarStmt(Stmt.Var stmt)
        {
            object value = null;

            if (stmt.initializer != null)
            {
                value = evaluate(stmt.initializer);
            }

            environment.define(stmt.name.lexeme(), value);
            return(null);
        }
Пример #14
0
        object Stmt.Visitor <object> .VisitVarStmt(Stmt.Var stmt)
        {
            Object value = null;

            if (stmt.initializer != null)
            {
                value = Evaluate(stmt.initializer);
            }

            environment.Define(stmt.name._lexeme, value);
            return(null);
        }
Пример #15
0
        public VoidObject VisitVarStmt(Stmt.Var stmt)
        {
            Declare(stmt.Name);

            if (stmt.Initializer != null)
            {
                Resolve(stmt.Initializer);
            }

            Define(stmt.Name, stmt.TypeReference ?? new TypeReference(stmt.Name));

            return(VoidObject.Void);
        }
Пример #16
0
        public object VisitVarStmt(Stmt.Var stmt)
        {
            if (stmt.initializer is not null)
            {
                var value = Evaluate(stmt.initializer);
                _environment.Define(stmt.name.Lexeme, value);
            }
            else
            {
                _environment.Define(stmt.name.Lexeme, _uninitialized);
            }

            return(null);
        }
Пример #17
0
        public object VisitVarStmt(Stmt.Var stmt)
        {
            if (stmt == null || stmt.name == null)
            {
                throw new ArgumentNullException("new vist stmt == null");
            }

            Declare(stmt.name);

            if (stmt.isInitalizedVar && stmt.exprInitializer != null)
            {
                Resolve(stmt.exprInitializer);
            }

            Define(stmt.name);
            return(new Stmt.Var());
        }
Пример #18
0
        public object visitVarStmt(Stmt.Var varDec)
        {
            captureToken(varDec.name);

            byte global = parseVariable(varDec.name, "Expect variable name.");

            if (varDec.initializer != null)
            {
                compile(varDec.initializer);
            }
            else
            {
                emitByte(OpCode.OP_NIL); // null initializer
            }

            defineVariable(global);
            return(null);
        }
Пример #19
0
    public object VisitVarStmt(Stmt.Var stmt, object options = null)
    {
        var typeTokens = (Token[])stmt.stmtType.Accept(this);
        var opts       = GetOptions(options);

        if (opts.InClassDefinition)
        {
            AddSymbolDefinition(typeTokens[0].lexeme, stmt.token.lexeme, AccessModifier.Public, false, typeTokens);
        }
        else
        {
            var tokLexemes = typeTokens.Select(tok => tok.lexeme);
            var lexeme     = string.Join(".", tokLexemes);
            AddSymbolDefinition(lexeme, stmt.token.lexeme, AccessModifier.Public, false, typeTokens);
        }
        if (stmt.initialiser != null)
        {
            stmt.initialiser.Accept(this);
        }
        return(null);
    }
Пример #20
0
 public Stmt VisitVarStmt(Stmt.Var stmt)
 {
     throw new NotImplementedException();
 }