EnvMap -> Variable

This commit is contained in:
Kelvin Sherlock 2013-08-18 19:03:32 -04:00
parent 810b521a11
commit b7b6d8656b
2 changed files with 70 additions and 10 deletions

View File

@ -73,7 +73,7 @@ namespace {
AddressMap wbrkMap; // write breaks.
ToolMap tbrkMap; // tool breaks.
std::unordered_map<std::string, uint32_t> envMap;
std::unordered_map<std::string, uint32_t> SymbolTable;
void hexdump(const uint8_t *data, ssize_t size, uint32_t address = 0)
@ -827,14 +827,17 @@ void SetXRegister(unsigned reg, uint32_t value)
}
uint32_t EnvLookup(const std::string &s)
uint32_t VariableGet(const std::string &s)
{
auto iter = envMap.find(s);
if (iter == envMap.end()) return 0;
auto iter = SymbolTable.find(s);
if (iter == SymbolTable.end()) return 0;
return iter->second;
}
void VariableSet(const std::string &key, uint32_t value)
{
SymbolTable.emplace(key, value);
}
// TODO -- RUN command - reload, re-initialize, re-execute
// TODO -- parser calls commands directly (except trace/step/run/etc)
@ -845,14 +848,14 @@ void Shell()
add_history("!Andy, it still has history!");
Loader::Native::LoadDebugNames(envMap);
Loader::Native::LoadDebugNames(SymbolTable);
//for (const auto &kv : envMap)
//for (const auto &kv : SymbolTable)
//{
// printf("%06x: %s\n", kv.second, kv.first.c_str());
//}
envMap = LoadTrapFile(MPW::RootDirPathForFile("Traps.text"));
//SymbolTable = LoadTrapFile(MPW::RootDirPathForFile("Traps.text"));
// start it up
printf("MPW Debugger shell\n\n");

View File

@ -25,13 +25,70 @@ struct Command {
uint32_t argv[10];
};
struct Token {
// constructor is not allowable because
// this is a union in the parser.
#if 0
Token():
intValue(0), stringValue(0), subtype(0)
{}
Token(uint32_t i) :
intValue(i), subtype(0)
{}
Token(std::string *s, unsigned st = 0) :
intValue(0), stringValue(s), subtype(st)
{}
#endif
static Token Make()
{
Token t = {0, 0, 0};
return t;
}
static Token Make(uint32_t i)
{
Token t = { i, 0, 0};
return t;
}
static Token Make(std::string *s, uint32_t st)
{
Token t = { 0, s, st};
return t;
}
uint32_t intValue;
std::string *stringValue;
unsigned subtype;
#if 0
Token& operator=(uint32_t rhs)
{
intValue = rhs;
stringValue = 0;
subtype = 0;
return *this;
}
#endif
operator uint32_t() const
{
return intValue;
}
};
bool ParseLine(const char *iter, Command *command);
std::unordered_map<std::string, uint32_t> LoadTrapFile(const std::string &path);
uint32_t EnvLookup(const std::string &);
uint32_t VariableGet(const std::string &);
void VariableSet(const std::string &name, uint32_t value);
void Shell();
void Help();