public IExpressionNode Visit(IfThenElseSyntaxNode node) { //expressions //if (...) {here} var expressionNodes = new IExpressionNode[node.Ifs.Length]; //conditions // if ( {here} ) ... var conditionNodes = new IExpressionNode[node.Ifs.Length]; for (int i = 0; i < expressionNodes.Length; i++) { conditionNodes[i] = ReadNode(node.Ifs[i].Condition); var exprNode = ReadNode(node.Ifs[i].Expression); expressionNodes[i] = CastExpressionNode.GetConvertedOrOriginOrThrow(exprNode, node.OutputType); } var elseNode = CastExpressionNode.GetConvertedOrOriginOrThrow(ReadNode(node.ElseExpr), node.OutputType); return(new IfElseExpressionNode( ifExpressionNodes: expressionNodes, conditionNodes: conditionNodes, elseNode: elseNode, interval: node.Interval, type: node.OutputType)); }
public override bool Visit(IfThenElseSyntaxNode node) { //Old code for composite upcast support: /* * if (node.OutputType != VarType.Anything) * return true; * * if (node.Ifs.Any(i => i.Expression.OutputType == VarType.Anything)) * return true; * if (node.ElseExpr.OutputType == VarType.Anything) * return true; * * throw ErrorFactory.VariousIfElementTypes(node); */ //If upcast is denied: if (node.OutputType == FunnyType.Anything) { return(true); } if (node.Ifs.Any(i => i.Expression.OutputType != node.OutputType) || node.ElseExpr.OutputType != node.OutputType) { throw ErrorFactory.VariousIfElementTypes(node); } return(true); }
public bool Visit(IfThenElseSyntaxNode node) { VisitChildren(node); var conditions = node.Ifs.SelectToArray(i => i.Condition.OrderNumber); var expressions = node.Ifs.SelectToArrayAndAppendTail( tail: node.ElseExpr.OrderNumber, mapFunc: i => i.Expression.OrderNumber); #if DEBUG Trace(node, $"if({string.Join(",", conditions)}): {string.Join(",", expressions)}"); #endif _ticTypeGraph.SetIfElse( conditions, expressions, node.OrderNumber); return(true); }
public virtual VisitorEnterResult Visit(IfThenElseSyntaxNode node) => DefaultVisitEnter(node);
public string Visit(IfThenElseSyntaxNode node) => "if (...) ... else ...";
public virtual bool Visit(IfThenElseSyntaxNode node) => true;