public IEnumerable <string> VisitVarStmt(Stmt.Var stmt) { yield return(stmt.Initializer.Match( some: init => $"var {stmt.Name} = {PrintExpr(init)}", none: () => $"var {stmt.Name};" )); }
public LoxVoid VisitVarStmt(Stmt.Var stmt) { Declare(stmt.Name); stmt.Initializer.MatchSome(init => Resolve(init)); Define(stmt.Name); return(null); }
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)); } } }
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); }
public Unit VisitVarStmt(Stmt.Var stmt) { Declare(stmt.Name); if (stmt.Initializer != null) { Resolve(stmt.Initializer); } Define(stmt.Name); return(new Unit()); }
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)); }
public object visitVarStmt(Stmt.Var stmt) { declare(stmt.name); if (stmt.initializer != null) { resolve(stmt.initializer); } define(stmt.name); return(null); }
public object VisitVarStmt(Stmt.Var stmt) { Declare(stmt.name); if (stmt.initializer != null) { Resolve(stmt.initializer); } Define(stmt.name); return(null); }
public string VisitVarStmt(Stmt.Var stmt) { if (!stmt.HasInitializer) { return(Parenthesize2("var", stmt.Name)); } else { return(Parenthesize2("var", stmt.Name, "=", stmt.Initializer)); } }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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()); }
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); }
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); }
public Stmt VisitVarStmt(Stmt.Var stmt) { throw new NotImplementedException(); }