예제 #1
0
        void HandleMultipleParameters(ParseNode astNode, CleanupAstNodeStates states)
        {
            var typeNode = states[0];
            var commaPositions = new List<int>();

            var isInSquares = false;
            states.EachWithIndex((node, id) =>
                {
                    var isComma = node.Token == TokenKind.Comma;
                    var isOpen = node.Token == TokenKind.OpenSquared;
                    var isClosed = node.Token == TokenKind.CloseSquared;
                    if (isOpen)
                        isInSquares = true;
                    if (isClosed)
                        isInSquares = false;
                    if (isComma && !isInSquares)
                        commaPositions.Add(id);
                });
            commaPositions.Add(states.Count - 1);


            var functionBlockNode = typeNode.GetParentFunctionBlockNode();
            if (functionBlockNode == null)
                functionBlockNode = typeNode.GetRootNode();
            var startPos = 1;
            foreach (var commaPosition in commaPositions)
            {
                ExtractArrayParameter(typeNode, states, startPos, commaPosition - 1, functionBlockNode);
                startPos = commaPosition + 1;
            }
            astNode.RemoveFromParent();
        }