package net.shadowfacts.asmr.program /** * @author shadowfacts */ interface ExecutionFlow { val block: ExecutableBlock val next: ExecutableBlock? val prev: ExecutableBlock? } class DirectExecutionFlow(override val block: ExecutableBlock): ExecutionFlow { override var next: ExecutableBlock? = null override var prev: ExecutableBlock? = null fun link(next: ExecutableBlock) { this.next = next (next.executionFlow as? DirectExecutionFlow)?.let { it.prev = block } } }