#define LLVM_CLANG_MANGLENUMBERINGCONTEXT_H
#include "clang/Basic/LLVM.h"
-#include "clang/Sema/Scope.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/IntrusiveRefCntPtr.h"
/// \brief Retrieve the mangling number of a static local variable within
/// this context.
- virtual unsigned getManglingNumber(const VarDecl *VD, Scope *S) = 0;
+ virtual unsigned getManglingNumber(const VarDecl *VD,
+ unsigned MSLocalManglingNumber) = 0;
/// \brief Retrieve the mangling number of a static local variable within
/// this context.
- virtual unsigned getManglingNumber(const TagDecl *TD, Scope *S) = 0;
+ virtual unsigned getManglingNumber(const TagDecl *TD,
+ unsigned MSLocalManglingNumber) = 0;
};
} // end namespace clang
const Token &getCurToken() const { return Tok; }
Scope *getCurScope() const { return Actions.getCurScope(); }
+ void incrementMSLocalManglingNumber() const {
+ return Actions.incrementMSLocalManglingNumber();
+ }
Decl *getObjCDeclContext() const { return Actions.getObjCDeclContext(); }
Self->EnterScope(ScopeFlags);
else {
if (BeforeCompoundStmt)
- Self->getCurScope()->incrementMSLocalManglingNumber();
+ Self->incrementMSLocalManglingNumber();
this->Self = 0;
}
#include "clang/Sema/LocInfoType.h"
#include "clang/Sema/ObjCMethodList.h"
#include "clang/Sema/Ownership.h"
+#include "clang/Sema/Scope.h"
#include "clang/Sema/ScopeInfo.h"
#include "clang/Sema/TypoCorrection.h"
#include "clang/Sema/Weak.h"
/// template substitution or instantiation.
Scope *getCurScope() const { return CurScope; }
+ void incrementMSLocalManglingNumber() const {
+ return CurScope->incrementMSLocalManglingNumber();
+ }
+
IdentifierInfo *getSuperIdentifier() const;
IdentifierInfo *getFloat128Identifier() const;
public:
/// Variable decls are numbered by identifier.
- virtual unsigned getManglingNumber(const VarDecl *VD, Scope *) {
+ virtual unsigned getManglingNumber(const VarDecl *VD, unsigned) {
return ++VarManglingNumbers[VD->getIdentifier()];
}
- virtual unsigned getManglingNumber(const TagDecl *TD, Scope *) {
+ virtual unsigned getManglingNumber(const TagDecl *TD, unsigned) {
return ++TagManglingNumbers[TD->getIdentifier()];
}
};
/// Typically these are things like static locals, lambdas, or blocks.
class MicrosoftNumberingContext : public MangleNumberingContext {
public:
- virtual unsigned getManglingNumber(const VarDecl *VD, Scope *S) {
- return S->getMSLocalManglingNumber();
+ virtual unsigned getManglingNumber(const VarDecl *VD,
+ unsigned MSLocalManglingNumber) {
+ return MSLocalManglingNumber;
}
- virtual unsigned getManglingNumber(const TagDecl *TD, Scope *S) {
- return S->getMSLocalManglingNumber();
+ virtual unsigned getManglingNumber(const TagDecl *TD,
+ unsigned MSLocalManglingNumber) {
+ return MSLocalManglingNumber;
}
};
return;
MangleNumberingContext &MCtx =
S.Context.getManglingNumberContext(Tag->getParent());
- S.Context.setManglingNumber(Tag, MCtx.getManglingNumber(Tag, TagScope));
+ S.Context.setManglingNumber(
+ Tag, MCtx.getManglingNumber(Tag, TagScope->getMSLocalManglingNumber()));
return;
}
if (MangleNumberingContext *MCtx =
S.getCurrentMangleNumberContext(Tag->getDeclContext(),
ManglingContextDecl)) {
- S.Context.setManglingNumber(Tag, MCtx->getManglingNumber(Tag, TagScope));
+ S.Context.setManglingNumber(
+ Tag,
+ MCtx->getManglingNumber(Tag, TagScope->getMSLocalManglingNumber()));
}
}
if (MangleNumberingContext *MCtx =
getCurrentMangleNumberContext(NewVD->getDeclContext(),
ManglingContextDecl)) {
- Context.setManglingNumber(NewVD, MCtx->getManglingNumber(NewVD, S));
+ Context.setManglingNumber(NewVD, MCtx->getManglingNumber(NewVD, S->getMSLocalManglingNumber()));
Context.setStaticLocalNumber(NewVD, MCtx->getStaticLocalNumber(NewVD));
}
}
if (MangleNumberingContext *MCtx =
getCurrentMangleNumberContext(NewVD->getDeclContext(),
ManglingContextDecl)) {
- Context.setManglingNumber(NewVD, MCtx->getManglingNumber(NewVD, S));
+ Context.setManglingNumber(
+ NewVD, MCtx->getManglingNumber(NewVD, S->getMSLocalManglingNumber()));
Context.setStaticLocalNumber(NewVD, MCtx->getStaticLocalNumber(NewVD));
}
}