public bool VisitIfStatement(Stmt.If statement) { bool result = true; var cg = Examine(statement.Condition); if (cg.Type != TypeEnum.BOOL) { result = false; Console.WriteLine("Not a boolean value in if condition"); } bool ms = Examine(statement.MainBlock); if (!ms) { result = false; Console.WriteLine("If statement main block is bad"); } if (statement.ElseBlock != null) { bool es = Examine(statement.ElseBlock); if (!es) { result = false; Console.WriteLine("If statement else block is bad"); } } return(result); }
public IEnumerable <string> VisitIfStmt(Stmt.If stmt) { string[] ifBody = PrintStmt(stmt.ThenBranch).ToArray(); yield return($"if ({PrintExpr(stmt.Condition)}) {ifBody[0]}"); foreach (string print in ifBody.Skip(1)) { yield return(print); } string[] elseBody = stmt.ElseBranch.Match( some: elseStmt => PrintStmt(elseStmt).ToArray(), none: () => new string[0] ); if (elseBody.Any()) { yield return($"else {elseBody[0]}"); foreach (string print in elseBody.Skip(1)) { yield return(print); } } }
public LoxVoid VisitIfStmt(Stmt.If stmt) { Resolve(stmt.Condition); Resolve(stmt.ThenBranch); stmt.ElseBranch.MatchSome(elseBranch => Resolve(elseBranch)); return(null); }
public string VisitIfStmt(Stmt.If stmt) { if (stmt.ElseBranch == null) { return(Parenthesize2("if", stmt.Condition, stmt.ThenBranch)); } return(Parenthesize2("if-else", stmt.Condition, stmt.ThenBranch, stmt.ElseBranch)); }
public object visitIfStmt(Stmt.If stmt) { resolve(stmt.condition); resolve(stmt.thenBranch); if (stmt.elseBranch != null) { resolve(stmt.elseBranch); } return(null); }
public object VisitIfStmt(Stmt.If stmt) { Resolve(stmt.Condition); Resolve(stmt.ThenBranch); if (stmt.ElseBranch != null) { Resolve(stmt.ElseBranch); } return(null); }
public Unit VisitIfStmt(Stmt.If stmt) { Resolve(stmt.Condition); Resolve(stmt.ThenBranch); if (stmt.ElseBranch != null) { Resolve(stmt.ElseBranch); } return(new Unit()); }
object Stmt.Visitor <object> .VisitIfStmt(Stmt.If stmt) { if (IsTruthy(Evaluate(stmt.condition))) { Execute(stmt.thenBranch); } else if (stmt.elseBranch != null) { Execute(stmt.elseBranch); } return(null); }
public object visitIfStmt(Stmt.If stmt) { if (isTruthy(evaluate(stmt.condition))) { execute(stmt.thenBranch); } else if (stmt.elseBranch != null) { execute(stmt.elseBranch); } return(null); }
public object VisitIfStmt(Stmt.If stmt) { Resolve(stmt.condition); Resolve(stmt.thenBranch); if (stmt.elseBranch != null) { Resolve(stmt.elseBranch); } return(new Stmt.DefaultStatement()); }
public object VisitIfStmt(Stmt.If stmt) { if (IsTruthy(Evaluate(stmt.condition))) { Execute(stmt.thenBranch); } else if (stmt.elseBranch is not null) { Execute(stmt.elseBranch); } return(null); }
public object VisitIfStmt(Stmt.If stmt) { if (IsTruthy(Evaluate(stmt.Condition))) { Execute(stmt.ThenBranch); } else if (stmt.ElseBranch != null) { Execute(stmt.ElseBranch); } return(null); }
public LoxVoid VisitIfStmt(Stmt.If stmt) { if (IsTruthy(Evalutate(stmt.Condition))) { Execute(stmt.ThenBranch); } else { stmt.ElseBranch.MatchSome((elseBranch) => Execute(elseBranch)); } return(null); }
public override VoidObject VisitIfStmt(Stmt.If stmt) { base.VisitIfStmt(stmt); if (stmt.Condition.TypeReference.ClrType != typeof(bool)) { TypeValidationErrorCallback(new TypeValidationError( (stmt.Condition as ITokenAware)?.Token, $"'{stmt.Condition.TypeReference.ClrType.ToTypeKeyword()}' is not a valid 'if' condition." )); } return(VoidObject.Void); }
public Stmt VisitIfStmt(Stmt.If stmt) { Stmt.DefaultStatement defaultStatement = new Stmt.DefaultStatement(); if (IsTrue(Evaluate(stmt.condition))) { Execute(stmt.thenBranch); } else { Execute(stmt.elseBranch); } return(defaultStatement); }
public string VisitIfStmt(Stmt.If stmt) { var cond = evaluate(stmt.Condition); if (cond is bool) { if ((bool)cond) { execute(stmt.WhenTrue); } else if (stmt.WhenFalse != null) { execute(stmt.WhenFalse); } return(""); } throw new RuntimeError("If statement condition not a boolean value"); }
public static TrashObject IfStmt(this Interpreter interpreter, Stmt.If stmt) { var cond = interpreter.Evaluate(stmt.Condition).Access(); if (cond is bool) { if ((bool)cond) { interpreter.Execute(stmt.WhenTrue); } else if (stmt.WhenFalse != null) { interpreter.Execute(stmt.WhenFalse); } return(null); } throw new Interpreter.RuntimeError("If statement condition not a boolean value"); }
public object visitIfStmt(Stmt.If ifStmt) { compile(ifStmt.condition); int thenJump = emitJump((byte)OpCode.OP_JUMP_IF_FALSE); emitByte(OpCode.OP_POP); compile(ifStmt.thenBranch); int elseJump = emitJump((byte)OpCode.OP_JUMP); patchJump(thenJump); emitByte(OpCode.OP_POP); if (ifStmt.elseBranch != null) { compile(ifStmt.elseBranch); } patchJump(elseJump); return(null); }
public object VisitIfStmt(Stmt.If stmt, object options) { return(Parenthesize("if", stmt.value)); }
public Stmt VisitIfStatement(Stmt.If statement) { Visit(statement.Condition); var conditionValue = _valueStack.Pop(); var condition = LLVM.BuildICmp(_builder, LLVMIntPredicate.LLVMIntNE, conditionValue, LLVM.ConstInt(LLVM.Int1Type(), 0, _lFalse), "cond"); LLVMValueRef func = LLVM.GetBasicBlockParent(LLVM.GetInsertBlock(_builder)); LLVMBasicBlockRef thenb = LLVM.AppendBasicBlock(func, "then"); //LLVMBasicBlockRef elseb = LLVM.AppendBasicBlock(func, "else"); LLVMBasicBlockRef merge = LLVM.AppendBasicBlock(func, "merge"); if (statement.ElseBlock != null) { LLVMBasicBlockRef elseb = LLVM.AppendBasicBlock(func, "else"); LLVM.BuildCondBr(_builder, condition, thenb, elseb); LLVM.PositionBuilderAtEnd(_builder, thenb); Visit(statement.MainBlock); LLVM.BuildBr(_builder, merge); thenb = LLVM.GetInsertBlock(_builder); LLVM.PositionBuilderAtEnd(_builder, elseb); Visit(statement.ElseBlock); LLVM.BuildBr(_builder, merge); elseb = LLVM.GetInsertBlock(_builder); LLVM.PositionBuilderAtEnd(_builder, merge); return(null); } else { LLVM.BuildCondBr(_builder, condition, thenb, merge); LLVM.PositionBuilderAtEnd(_builder, thenb); Visit(statement.MainBlock); LLVM.BuildBr(_builder, merge); thenb = LLVM.GetInsertBlock(_builder); //LLVM.PositionBuilderAtEnd(_builder, elseb); //Visit(statement.ElseBlock); //LLVM.BuildBr(_builder, merge); //elseb = LLVM.GetInsertBlock(_builder); LLVM.PositionBuilderAtEnd(_builder, merge); return(null); } /*LLVM.BuildCondBr(_builder, condition, thenb, elseb); * LLVM.PositionBuilderAtEnd(_builder, thenb); * * Visit(statement.MainBlock); * * LLVM.BuildBr(_builder, merge); * thenb = LLVM.GetInsertBlock(_builder); * * LLVM.PositionBuilderAtEnd(_builder, elseb); * * Visit(statement.ElseBlock); * * LLVM.BuildBr(_builder, merge); * elseb = LLVM.GetInsertBlock(_builder); * * LLVM.PositionBuilderAtEnd(_builder, merge); * * return null;*/ }
public TrashObject VisitIfStmt(Stmt.If stmt) { return(this.IfStmt(stmt)); }
public Stmt VisitIfStmt(Stmt.If stmt) { throw new NotImplementedException(); }
public object VisitIfStmt(Stmt.If stmt, object options = null) { return(null); }