]> granicus.if.org Git - clang/blob - lib/CodeGen/CGCall.h
Change CGFunctionInfo args iterator to not include the return type.
[clang] / lib / CodeGen / CGCall.h
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
22 namespace llvm {
23   class Function;
24   struct AttributeWithIndex;
25   class Value;
26
27   template<typename T, unsigned> class SmallVector;
28 }
29
30 namespace clang {
31   class ASTContext;
32   class Decl;
33   class FunctionDecl;
34   class ObjCMethodDecl;
35   class VarDecl;
36
37 namespace 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   /// CGFunctionInfo - Class to encapsulate the information about a
51   /// function definition.
52   class CGFunctionInfo {
53     llvm::SmallVector<QualType, 16> ArgTypes;
54
55   public:
56     typedef llvm::SmallVector<QualType, 16>::const_iterator arg_iterator;
57
58     CGFunctionInfo(QualType ResTy, 
59                    const llvm::SmallVector<QualType, 16> &ArgTys);
60
61     arg_iterator arg_begin() const;
62     arg_iterator arg_end() const;
63
64     QualType getReturnType() const { return ArgTypes[0]; }
65   };
66 }  // end namespace CodeGen
67 }  // end namespace clang
68
69 #endif