protected virtual void _Generate(AstNodeExprTerop item) { Output.Write("("); Generate(item.Cond); Output.Write(" ? "); Generate(item.True); Output.Write(" : "); Generate(item.False); Output.Write(")"); }
protected virtual void _Generate(AstNodeExprTerop Terop) { if (Terop.True.Type != Terop.False.Type) { throw (new InvalidOperationException(String.Format("AstNodeExprTerop '?:' types must match {0} != {1}", Terop.True.Type, Terop.False.Type))); } var TernaryType = Terop.True.Type; var TernaryTempAstLocal = AstLocal.Create(TernaryType); Generate(new AstNodeStmIfElse( Terop.Cond, new AstNodeStmAssign(new AstNodeExprLocal(TernaryTempAstLocal), Terop.True), new AstNodeStmAssign(new AstNodeExprLocal(TernaryTempAstLocal), Terop.False) )); Generate(new AstNodeExprLocal(TernaryTempAstLocal)); }
protected virtual void _Generate(AstNodeExprTerop terop) { if (terop.True.Type != terop.False.Type) { throw new InvalidOperationException( $"AstNodeExprTerop '?:' types must match {terop.True.Type} != {terop.False.Type}"); } var ternaryType = terop.True.Type; var ternaryTempAstLocal = AstLocal.Create(ternaryType); Generate(new AstNodeStmIfElse( terop.Cond, new AstNodeStmAssign(new AstNodeExprLocal(ternaryTempAstLocal), terop.True), new AstNodeStmAssign(new AstNodeExprLocal(ternaryTempAstLocal), terop.False) )); Generate(new AstNodeExprLocal(ternaryTempAstLocal)); }