public object Visit(CallExpression callExpression) { return(null); }
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); }