1 //=== MangleNumberingContext.h - Context for mangling numbers ---*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file defines the LambdaBlockMangleContext interface, which keeps track 10 // of the Itanium C++ ABI mangling numbers for lambda expressions and block 11 // literals. 12 // 13 //===----------------------------------------------------------------------===// 14 #ifndef LLVM_CLANG_AST_MANGLENUMBERINGCONTEXT_H 15 #define LLVM_CLANG_AST_MANGLENUMBERINGCONTEXT_H 16 17 #include "clang/Basic/LLVM.h" 18 #include "llvm/ADT/IntrusiveRefCntPtr.h" 19 20 namespace clang { 21 22 class BlockDecl; 23 class CXXMethodDecl; 24 class IdentifierInfo; 25 class TagDecl; 26 class Type; 27 class VarDecl; 28 29 /// Keeps track of the mangled names of lambda expressions and block 30 /// literals within a particular context. 31 class MangleNumberingContext { 32 public: ~MangleNumberingContext()33 virtual ~MangleNumberingContext() {} 34 35 /// Retrieve the mangling number of a new lambda expression with the 36 /// given call operator within this context. 37 virtual unsigned getManglingNumber(const CXXMethodDecl *CallOperator) = 0; 38 39 /// Retrieve the mangling number of a new block literal within this 40 /// context. 41 virtual unsigned getManglingNumber(const BlockDecl *BD) = 0; 42 43 /// Static locals are numbered by source order. 44 virtual unsigned getStaticLocalNumber(const VarDecl *VD) = 0; 45 46 /// Retrieve the mangling number of a static local variable within 47 /// this context. 48 virtual unsigned getManglingNumber(const VarDecl *VD, 49 unsigned MSLocalManglingNumber) = 0; 50 51 /// Retrieve the mangling number of a static local variable within 52 /// this context. 53 virtual unsigned getManglingNumber(const TagDecl *TD, 54 unsigned MSLocalManglingNumber) = 0; 55 56 /// Retrieve the mangling number of a new lambda expression with the 57 /// given call operator within the device context. No device number is 58 /// assigned if there's no device numbering context is associated. getDeviceManglingNumber(const CXXMethodDecl *)59 virtual unsigned getDeviceManglingNumber(const CXXMethodDecl *) { return 0; } 60 }; 61 62 } // end namespace clang 63 #endif 64