コード例 #1
0
        /// <summary>
        /// When a name is absent, deconstruct a given tuple, otherwise create virtual member references
        /// </summary>
        private Ust HandleTupleStatement(VariableDeclarationSyntax node)
        {
            List <AssignmentExpression> variables =
                node.Variables.Select(v => (AssignmentExpression)VisitAndReturnNullIfError(v)).ToList();

            var typeNode = (TupleTypeSyntax)node.Type;
            var textSpan = node.GetTextSpan();

            for (int i = 0; i < typeNode.Elements.Count; i++)
            {
                TupleElementSyntax typeElement = typeNode.Elements[i];
                if (typeElement.Identifier == null)
                {
                    continue;
                }

                var initValues = node.Variables.Select(v =>
                {
                    var tuple = v.Initializer?.Value as TupleExpressionSyntax;
                    if (tuple == null)
                    {
                        return(null);
                    }
                    return((Expression)base.Visit(tuple.Arguments.ElementAtOrDefault(i)));
                }).ToList();

                variables = CreateVirtualMemberRefs(variables, typeElement, i, initValues, typeNode.Elements[i].GetTextSpan());
            }
            var declaration = new VariableDeclarationExpression(null, variables, textSpan);

            return(new ExpressionStatement(declaration));
        }
コード例 #2
0
ファイル: StatementVisitor.cs プロジェクト: Yikez978/PT.PM
        public override UstNode VisitVariableDeclaration(VariableDeclarationSyntax node)
        {
            var typeToken = ConvertType(base.Visit(node.Type));

            AssignmentExpression[] vars = node
                                          .Variables.Select(v => (AssignmentExpression)VisitAndReturnNullIfError(v))
                                          .ToArray();

            var result = new VariableDeclarationExpression(typeToken, vars, node.GetTextSpan(), FileNode);

            return(result);
        }