Esempio n. 1
0
        private static SyntaxNode ArgumentList(RParser.SublistContext args, Func<ParserRuleContext, Scope, SyntaxNode> transform, Scope scope)
        {
            var nodes = new List<ArgumentSyntax>();
            foreach (var arg in args.sub())
            {
                var argName = null as string;
                var value = null as ExpressionSyntax;
                if (arg is RParser.SubExpressionContext)
                    value = (ExpressionSyntax)transform((arg as RParser.SubExpressionContext).expr(), scope);
                else if (arg is RParser.SubAssignmentContext)
                {
                    var paramName = (arg as RParser.SubAssignmentContext);
                    argName = paramName.ID().ToString();
                    value = (ExpressionSyntax)transform(paramName.expr(), scope);
                }
                else if (arg is RParser.SubStringAssignmentContext)
                {
                    var paramName = (arg as RParser.SubStringAssignmentContext);
                    argName = paramName.STRING().ToString();
                    value = (ExpressionSyntax)transform(paramName.expr(), scope);
                }
                else if (arg is RParser.SubIncompleteNullContext || arg is RParser.SubNullAssignmentContext)
                {
                    throw new NotImplementedException();
                }
                else if (arg is RParser.SubEllipsisContext)
                {
                    throw new NotImplementedException();
                }
                else if (arg is RParser.SubIncompleteAssignmentContext || arg is RParser.SubIncompleteStringContext || arg is RParser.SubIncompleteStringContext)
                {
                    throw new NotImplementedException();
                }
                else if (arg is RParser.SubEmptyContext)
                {
                    continue;
                }
                else
                    Debug.Assert(false);

                Debug.Assert(value != null);
                var result = CSharp.Argument(value);
                if (argName != null)
                    result = result
                        .WithNameColon(CSharp
                            .NameColon(argName));

                nodes.Add(result);
            }

            return CSharp
                .ArgumentList()
                .WithArguments(CSharp
                    .SeparatedList(nodes));
        }