CGCall.h revision bb36d331f439f49859efcfb4435c61762fbba6f9
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 AttributeWithIndex;
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::AttributeWithIndex, 8> AttributeListType;
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    llvm::SmallVector<QualType, 16> ArgTypes;
58
59  public:
60    CGFunctionInfo(const FunctionTypeNoProto *FTNP);
61    CGFunctionInfo(const FunctionTypeProto *FTP);
62    CGFunctionInfo(const FunctionDecl *FD);
63    CGFunctionInfo(const ObjCMethodDecl *MD, const ASTContext &Context);
64    CGFunctionInfo(QualType ResTy, const CallArgList &Args);
65    CGFunctionInfo(QualType ResTy, const FunctionArgList &Args);
66
67    ArgTypeIterator argtypes_begin() const;
68    ArgTypeIterator argtypes_end() const;
69
70    QualType getReturnType() const { return ArgTypes[0]; }
71  };
72}  // end namespace CodeGen
73}  // end namespace clang
74
75#endif
76