aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--symtab.cc13
-rw-r--r--symtab.h4
2 files changed, 11 insertions, 6 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;
diff --git a/symtab.h b/symtab.h
index b2e772e..1e3ec74 100644
--- a/symtab.h
+++ b/symtab.h
@@ -22,7 +22,7 @@
using namespace std;
-extern vector<string>* g_symbols;
+extern vector<string*>* g_symbols;
class Symtab;
@@ -34,7 +34,7 @@ class Symbol {
}
const string& str() const {
- return (*g_symbols)[v_];
+ return *((*g_symbols)[v_]);
}
const char* c_str() const {