CGCall.h revision 45c25ba11cbf8c9a461def5b03f6ee9481e06769
1//===----- CGCall.h - Encapsulate calling convention details ----*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// These classes wrap the information about a call or function 11// definition used to handle ABI compliancy. 12// 13//===----------------------------------------------------------------------===// 14 15#ifndef CLANG_CODEGEN_CGCALL_H 16#define CLANG_CODEGEN_CGCALL_H 17 18#include "clang/AST/Type.h" 19 20#include "CGValue.h" 21 22namespace llvm { 23 class Function; 24 struct ParamAttrsWithIndex; 25 class Value; 26 27 template<typename T, unsigned> class SmallVector; 28} 29 30namespace clang { 31 class ASTContext; 32 class Decl; 33 class FunctionDecl; 34 class ObjCMethodDecl; 35 class VarDecl; 36 37namespace CodeGen { 38 typedef llvm::SmallVector<llvm::ParamAttrsWithIndex, 8> ParamAttrListType; 39 40 /// CallArgList - Type for representing both the value and type of 41 /// arguments in a call. 42 typedef llvm::SmallVector<std::pair<RValue, QualType>, 16> CallArgList; 43 44 /// FunctionArgList - Type for representing both the decl and type 45 /// of parameters to a function. The decl must be either a 46 /// ParmVarDecl or ImplicitParamDecl. 47 typedef llvm::SmallVector<std::pair<const VarDecl*, QualType>, 48 16> FunctionArgList; 49 50 // FIXME: This should be a better iterator type so that we can avoid 51 // construction of the ArgTypes smallvectors. 52 typedef llvm::SmallVector<QualType, 16>::const_iterator ArgTypeIterator; 53 54 /// CGFunctionInfo - Class to encapsulate the information about a 55 /// function definition. 56 class CGFunctionInfo { 57 bool IsVariadic; 58 59 llvm::SmallVector<QualType, 16> ArgTypes; 60 61 public: 62 CGFunctionInfo(const FunctionTypeNoProto *FTNP); 63 CGFunctionInfo(const FunctionTypeProto *FTP); 64 CGFunctionInfo(const FunctionDecl *FD); 65 CGFunctionInfo(const ObjCMethodDecl *MD, 66 const ASTContext &Context); 67 68 bool isVariadic() const { return IsVariadic; } 69 70 ArgTypeIterator argtypes_begin() const; 71 ArgTypeIterator argtypes_end() const; 72 }; 73 74 /// CGCallInfo - Class to encapsulate the arguments and clang types 75 /// used in a call. 76 class CGCallInfo { 77 llvm::SmallVector<QualType, 16> ArgTypes; 78 79 public: 80 CGCallInfo(QualType _ResultType, const CallArgList &Args); 81 82 ArgTypeIterator argtypes_begin() const; 83 ArgTypeIterator argtypes_end() const; 84 }; 85} // end namespace CodeGen 86} // end namespace clang 87 88#endif 89