Beispiel #1
0
 public object Visit(CallExpression callExpression)
 {
     return(null);
 }
Beispiel #2
0
        CallExpression ParseCallExpression()
        {
            var expr = new CallExpression();

            AcceptElementIfNext(Token.Tail);
            AcceptElement(Token.Call);

            expr.ZeroExtended = AcceptElementIfNext(Token.ZeroExt);

            expr.Type = ParseType();

            if (PeekElement().Type == Token.Bitcast)
            {
                expr.FunctionName = ParseBitcast().Name;
            }
            else
            {
                if (PeekElement().Type == Token.GlobalIdentifier)
                {
                    expr.FunctionName = AcceptElement(Token.GlobalIdentifier).Data;
                }
                else
                {
                    expr.VariableName = AcceptElement(Token.LocalIdentifier).Data;
                }
            }

            AcceptElement(Token.ParenOpen);

            if (PeekElement().Type != Token.ParenClose)
            {
                while (true)
                {
                    var par = new CallExpression.CallParameter();

                    par.Type = ParseType();

                    par.ByVal = AcceptElementIfNext(Token.Byval);
                    AcceptElementIfNext(Token.Nonnull);

                    if (AcceptElementIfNext(Token.Align))
                    {
                        par.Align = int.Parse(AcceptElement(Token.IntegerLiteral).Data);
                    }

                    par.Expression = ParseExpression();
                    expr.Parameters.Add(par);

                    if (PeekElement().Type == Token.Comma)
                    {
                        AcceptElement(Token.Comma);
                    }

                    if (PeekElement().Type == Token.ParenClose)
                    {
                        break;
                    }
                }
            }
            AcceptElement(Token.ParenClose);

            if (AcceptElementIfNext(Token.Hash))
            {
                AcceptElement(Token.IntegerLiteral);
            }
            return(expr);
        }