package org.reasm.m68k.assembly.internal; import javax.annotation.Nonnull; import javax.annotation.concurrent.Immutable; import org.reasm.expressions.BinaryOperator; import org.reasm.m68k.messages.NextWithoutForErrorMessage; /** * The <code>NEXT</code> directive. * * @author Francis Gagné */ @Immutable class NextDirective extends Mnemonic { @Nonnull static final NextDirective NEXT = new NextDirective(); private NextDirective() { } @Override void assemble(M68KAssemblyContext context) { context.sizeNotAllowed(); context.requireNumberOfOperands(0); final Object blockState = context.getParentBlock(); if (blockState instanceof ForBlockState) { final ForBlockState forBlockState = (ForBlockState) blockState; forBlockState.counter = BinaryOperator.ADDITION.apply(forBlockState.counter, forBlockState.step, context.getEvaluationContext()); } else { context.addMessage(new NextWithoutForErrorMessage()); } } }