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(); registers = newLanguage.getRegisters();
baseContextRegister = newLanguage.getContextBaseRegister(); baseContextRegister = newLanguage.getContextBaseRegister();
initRegisterMap(); init();
registerValueMap.clear(); registerValueMap.clear();
initializedCurrentValues(); initializedCurrentValues();

View file

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