aboutsummaryrefslogtreecommitdiff
path: root/lib/AST/Expr.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-02-06 19:55:15 +0000
committerTed Kremenek <kremenek@apple.com>2009-02-06 19:55:15 +0000
commit6e94ef5696cfb005d3fc7bbac8dcf7690b64f0a5 (patch)
tree97de005ec3d70e33d4173910446a126dd9a2211a /lib/AST/Expr.cpp
parent2770105f9ecdc1bf8ba0bc9ed1963eeabc10377d (diff)
Move StringLiteral to allocate its internal string data using the allocator in
ASTContext. This required changing all clients to pass in the ASTContext& to the constructor of StringLiteral. I also changed all allocations of StringLiteral to use new(ASTContext&). Along the way, I updated a bunch of new()'s in StmtSerialization.cpp to use the allocator from ASTContext& (not complete). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63958 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/Expr.cpp')
-rw-r--r--lib/AST/Expr.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp
index ce13c34012..d627ab03b2 100644
--- a/lib/AST/Expr.cpp
+++ b/lib/AST/Expr.cpp
@@ -38,12 +38,13 @@ double FloatingLiteral::getValueAsApproximateDouble() const {
}
-StringLiteral::StringLiteral(const char *strData, unsigned byteLength,
- bool Wide, QualType t, SourceLocation firstLoc,
+StringLiteral::StringLiteral(ASTContext& C, const char *strData,
+ unsigned byteLength, bool Wide, QualType t,
+ SourceLocation firstLoc,
SourceLocation lastLoc) :
Expr(StringLiteralClass, t) {
// OPTIMIZE: could allocate this appended to the StringLiteral.
- char *AStrData = new char[byteLength];
+ char *AStrData = new (C, 1) char[byteLength];
memcpy(AStrData, strData, byteLength);
StrData = AStrData;
ByteLength = byteLength;
@@ -52,8 +53,9 @@ StringLiteral::StringLiteral(const char *strData, unsigned byteLength,
lastTokLoc = lastLoc;
}
-StringLiteral::~StringLiteral() {
- delete[] StrData;
+void StringLiteral::Destroy(ASTContext &C) {
+ C.Deallocate(const_cast<char*>(StrData));
+ this->~StringLiteral();
}
bool UnaryOperator::isPostfix(Opcode Op) {