Fix #1358 debugger code edit instability

This commit is contained in:
shygoo 2017-08-19 14:35:38 -05:00
parent b88ce71eef
commit 372efa11f1
2 changed files with 15 additions and 2 deletions

View File

@ -11,7 +11,7 @@
REGISTER* lookup_register(char* name);
static int parse_error = 0;
static ParseError parse_error = ERR_NONE;
static uint32_t m_Address = 0x00000000;
void to_lower(char* str)
@ -51,6 +51,12 @@ uint32_t pop_val()
{
char* v = strtok(NULL, " \t,()");
if (v == NULL)
{
parse_error = ERR_EXPECTED_VAL;
return 0;
}
if (isalpha(*v))
{
// todo lookup label value
@ -306,6 +312,8 @@ REGISTER* lookup_register(char* name)
bool CAssembler::AssembleLine(char* line, uint32_t* opcode, uint32_t address)
{
parse_error = ERR_NONE;
m_Address = address;
char line_c[128];
strncpy(line_c, line, 128);
@ -338,6 +346,11 @@ bool CAssembler::AssembleLine(char* line, uint32_t* opcode, uint32_t address)
for (int i = 0; instruction->syntax[i]; i++)
{
instruction->syntax[i](opcode);
if (parse_error != ERR_NONE)
{
return false;
}
}
return true;
}

View File

@ -202,11 +202,11 @@ LRESULT CDebugCommandsView::OnOpKeyDown(UINT uMsg, WPARAM wParam, LPARAM lParam,
int textLen = m_OpEdit.GetWindowTextLengthA();
char text[256];
m_OpEdit.GetWindowTextA(text, 255);
m_OpEdit.SetWindowTextA("");
uint32_t op;
bool bValid = CAssembler::AssembleLine(text, &op, m_SelectedAddress);
if (bValid)
{
m_OpEdit.SetWindowTextA("");
EditOp(m_SelectedAddress, op);
m_SelectedAddress += 4;
BeginOpEdit(m_SelectedAddress);