aboutsummaryrefslogtreecommitdiff
path: root/symtab.cc
diff options
context:
space:
mode:
authorShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-07-17 05:55:42 +0900
committerShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-07-17 05:55:49 +0900
commitba2ccdb7c84374e2f61e43d531a8f96da92da5ed (patch)
tree0040d2982f479ddf61845334578774e06da33da1 /symtab.cc
parentaf9887a8175386d1980e11cc3d22e59deb7f86bc (diff)
Revert "Revert "[C++] Fix Symtab on MacOSX""
This reverts commit 312e2d27378c47c263e83f0993f1cf67ef4c4235. I have accidentally reverted the change
Diffstat (limited to 'symtab.cc')
-rw-r--r--symtab.cc13
1 files changed, 9 insertions, 4 deletions
diff --git a/symtab.cc b/symtab.cc
index dd4b405..16b9f80 100644
--- a/symtab.cc
+++ b/symtab.cc
@@ -23,7 +23,7 @@
#include "log.h"
#include "strutil.h"
-vector<string>* g_symbols;
+vector<string*>* g_symbols;
Symbol kEmptySym = Symbol(Symbol::IsUninitialized());
Symbol kShellSym = Symbol(Symbol::IsUninitialized());
@@ -53,14 +53,19 @@ class Symtab {
kShellSym = Intern("SHELL");
}
+ ~Symtab() {
+ for (string* s : symbols_)
+ delete s;
+ }
+
Symbol InternImpl(StringPiece s) {
auto found = symtab_.find(s);
if (found != symtab_.end()) {
return found->second;
}
- symbols_.push_back(s.as_string());
+ symbols_.push_back(new string(s.data(), s.size()));
Symbol sym = Symbol(symtab_.size());
- bool ok = symtab_.emplace(symbols_.back(), sym).second;
+ bool ok = symtab_.emplace(*symbols_.back(), sym).second;
CHECK(ok);
return sym;
}
@@ -74,7 +79,7 @@ class Symtab {
private:
unordered_map<StringPiece, Symbol> symtab_;
- vector<string> symbols_;
+ vector<string*> symbols_;
};
static Symtab* g_symtab;