From b49637cdbf4551078d89b1065a9225711f9dea76 Mon Sep 17 00:00:00 2001 From: coffeepots Date: Tue, 18 Sep 2018 13:10:30 +0100 Subject: [PATCH] Helper procs for updating opcode executor based on fork --- nimbus/vm/interpreter_dispatch.nim | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/nimbus/vm/interpreter_dispatch.nim b/nimbus/vm/interpreter_dispatch.nim index f2fcd7801..a64b9bd62 100644 --- a/nimbus/vm/interpreter_dispatch.nim +++ b/nimbus/vm/interpreter_dispatch.nim @@ -222,14 +222,22 @@ macro genFrontierDispatch(computation: BaseComputation): untyped = proc frontierVM(computation: var BaseComputation) = genFrontierDispatch(computation) +proc updateOpcodeExec*(computation: var BaseComputation, fork: Fork) = + case fork + of FkFrontier: + computation.opCodeExec = frontierVM + computation.frontierVM() + else: + raise newException(VMError, "Unknown or not implemented fork: " & $fork) + +proc updateOpcodeExec*(computation: var BaseComputation) = + let fork = computation.vmState.blockHeader.blockNumber.toFork + computation.updateOpcodeExec(fork) + proc executeOpcodes*(computation: var BaseComputation) = + # TODO: Optimise getting fork and updating opCodeExec only when necessary let fork = computation.vmState.blockHeader.blockNumber.toFork try: - case fork - of FkFrontier: - computation.opCodeExec = frontierVM - computation.frontierVM() - else: - raise newException(ValueError, "not implemented fork: " & $fork) + computation.updateOpcodeExec(fork) except VMError: computation.error = Error(info: getCurrentExceptionMsg())