BlSymTable.cpp 729 B

123456789101112131415161718192021222324252627282930313233343536
  1. #include "BlSymTable.h"
  2. #include "BlContext.h"
  3. USING_NS_BF;
  4. BlSymTable::BlSymTable()
  5. {
  6. #ifdef BL_USE_DENSEMAP_SYMTAB
  7. mMap.set_empty_key(Val128(-1));
  8. //mMap.set_empty_key("");
  9. mMap.min_load_factor(0);
  10. mMap.resize(100000);
  11. #endif
  12. }
  13. BlSymbol* BlSymTable::Add(const char* name, bool* isNew)
  14. {
  15. Val128 val128 = Hash128(name, (int)strlen(name));
  16. auto itr = mMap.insert(std::make_pair(val128, (BlSymbol*)NULL));
  17. if (!itr.second)
  18. {
  19. if (isNew != NULL)
  20. *isNew = false;
  21. return itr.first->second;
  22. }
  23. if (isNew != NULL)
  24. *isNew = true;
  25. auto blSymbol = new BlSymbol();
  26. itr.first->second = blSymbol;
  27. blSymbol->mName = name;
  28. blSymbol->mKind = BlSymKind_Undefined;
  29. blSymbol->mObjectDataIdx = -1;
  30. return blSymbol;
  31. }