[C++] Give fixed symbol IDs for 1-character variables
diff --git a/symtab.cc b/symtab.cc
index 342d222..54979a6 100644
--- a/symtab.cc
+++ b/symtab.cc
@@ -34,12 +34,20 @@
Symtab() {
CHECK(g_symbols == NULL);
g_symbols = &symbols_;
- Symbol s = Intern("");
+
+ Symbol s = InternImpl("");
CHECK(s.v_ == 0);
CHECK(Intern("") == s);
+ char b[2];
+ b[1] = 0;
+ for (int i = 1; i < 256; i++) {
+ b[0] = i;
+ s = InternImpl(b);
+ CHECK(s.val() == i);
+ }
}
- Symbol Intern(StringPiece s) {
+ Symbol InternImpl(StringPiece s) {
auto found = symtab_.find(s);
if (found != symtab_.end()) {
return found->second;
@@ -51,6 +59,13 @@
return sym;
}
+ Symbol Intern(StringPiece s) {
+ if (s.size() <= 1) {
+ return Symbol(s.empty() ? 0 : (unsigned char)s[0]);
+ }
+ return InternImpl(s);
+ }
+
private:
unordered_map<StringPiece, Symbol> symtab_;
vector<string> symbols_;