1 //===--- LambdaMangleContext.cpp - Context for mangling lambdas -*- 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 // This file defines the LambdaMangleContext class, which keeps track of 11 // the Itanium C++ ABI mangling numbers for lambda expressions. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #include "clang/AST/LambdaMangleContext.h" 16 #include "clang/AST/ASTContext.h" 17 #include "clang/AST/DeclCXX.h" 18 19 using namespace clang; 20 getManglingNumber(CXXMethodDecl * CallOperator)21unsigned LambdaMangleContext::getManglingNumber(CXXMethodDecl *CallOperator) { 22 const FunctionProtoType *Proto 23 = CallOperator->getType()->getAs<FunctionProtoType>(); 24 ASTContext &Context = CallOperator->getASTContext(); 25 26 QualType Key = 27 Context.getFunctionType(Context.VoidTy, 28 ArrayRef<QualType>(Proto->arg_type_begin(), 29 Proto->getNumArgs()), 30 FunctionProtoType::ExtProtoInfo()); 31 Key = Context.getCanonicalType(Key); 32 return ++ManglingNumbers[Key->castAs<FunctionProtoType>()]; 33 } 34