GP-25_emteere_StoredProgramRegisters code review changes

This commit is contained in:
emteere 2020-07-14 21:52:34 -04:00
parent 9c7c0d4492
commit 1fc5d70c48
2 changed files with 17 additions and 15 deletions

View file

@ -354,7 +354,7 @@ public class ProgramRegisterContextDB extends AbstractStoredProgramContext imple
registers = newLanguage.getRegisters();
baseContextRegister = newLanguage.getContextBaseRegister();
initRegisterMap();
init();
registerValueMap.clear();
initializedCurrentValues();

View file

@ -38,7 +38,7 @@ abstract public class AbstractProgramContext implements ProgramContext, DefaultP
protected AbstractProgramContext(Register[] registers) {
this.registers = registers;
initRegisterMap();
init();
if (baseContextRegister != null) {
nonFlowingContextRegisterMask = baseContextRegister.getBaseMask().clone();
@ -109,12 +109,13 @@ abstract public class AbstractProgramContext implements ProgramContext, DefaultP
return value.clearBitValues(flowingContextRegisterMask);
}
protected void initRegisterMap() {
protected void init() {
registerNameMap = null;
baseContextRegister = null;
for (Register register : registers) {
if (register.isProcessorContext()) {
baseContextRegister = register.getBaseRegister();
break; // should only be one
}
}
if (baseContextRegister == null) {
@ -124,7 +125,11 @@ abstract public class AbstractProgramContext implements ProgramContext, DefaultP
defaultDisassemblyContext = new RegisterValue(baseContextRegister);
}
private void initRegisterNameMap() {
private Map<String, Register> getRegisterNameMap() {
// if register map hasn't been initialized, initialize it
if (registerNameMap == null) {
registerNameMap = new HashMap<String, Register>();
// NOTE: if you want upper case names recognized, override this method and add them
for (Register register : registers) {
registerNameMap.put(register.getName(), register);
@ -133,6 +138,8 @@ abstract public class AbstractProgramContext implements ProgramContext, DefaultP
}
}
}
return registerNameMap;
}
@Override
public final Register[] getProcessorStateRegisters() {
@ -147,12 +154,7 @@ abstract public class AbstractProgramContext implements ProgramContext, DefaultP
@Override
public final Register getRegister(String name) {
// if register map hasn't been initialized, initialize it
if (registerNameMap == null) {
registerNameMap = new HashMap<String, Register>();
initRegisterNameMap();
}
Register reg = registerNameMap.get(name);
Register reg = getRegisterNameMap().get(name);
return reg;
}