1 //===----- CGCall.h - Encapsulate calling convention details ----*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // These classes wrap the information about a call or function
11 // definition used to handle ABI compliancy.
13 //===----------------------------------------------------------------------===//
15 #ifndef CLANG_CODEGEN_CGCALL_H
16 #define CLANG_CODEGEN_CGCALL_H
18 #include "clang/AST/Type.h"
24 struct ParamAttrsWithIndex;
27 template<typename T, unsigned> class SmallVector;
38 typedef llvm::SmallVector<llvm::ParamAttrsWithIndex, 8> ParamAttrListType;
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;
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>,
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;
54 /// CGFunctionInfo - Class to encapsulate the information about a
55 /// function definition.
56 class CGFunctionInfo {
59 llvm::SmallVector<QualType, 16> ArgTypes;
62 CGFunctionInfo(const FunctionTypeNoProto *FTNP);
63 CGFunctionInfo(const FunctionTypeProto *FTP);
64 CGFunctionInfo(const FunctionDecl *FD);
65 CGFunctionInfo(const ObjCMethodDecl *MD,
66 const ASTContext &Context);
68 bool isVariadic() const { return IsVariadic; }
70 ArgTypeIterator argtypes_begin() const;
71 ArgTypeIterator argtypes_end() const;
74 /// CGCallInfo - Class to encapsulate the arguments and clang types
77 llvm::SmallVector<QualType, 16> ArgTypes;
80 CGCallInfo(QualType _ResultType, const CallArgList &Args);
82 ArgTypeIterator argtypes_begin() const;
83 ArgTypeIterator argtypes_end() const;
85 } // end namespace CodeGen
86 } // end namespace clang