FileDocCategorySizeDatePackage
Dop.javaAPI DocAndroid 5.1 API5376Thu Mar 12 22:18:30 GMT 2015com.android.dx.dex.code

Dop

public final class Dop extends Object
Representation of an opcode.

Fields Summary
private final int
opcode
{@code Opcodes.isValid();} the opcode value itself
private final int
family
{@code Opcodes.isValid();} the opcode family
private final int
nextOpcode
{@code Opcodes.isValid();} what opcode (by number) to try next when attempting to match an opcode to particular arguments; {@code Opcodes.NO_NEXT} to indicate that this is the last opcode to try in a particular chain
private final InsnFormat
format
{@code non-null;} the instruction format
private final boolean
hasResult
whether this opcode uses a result register
Constructors Summary
public Dop(int opcode, int family, int nextOpcode, InsnFormat format, boolean hasResult)
Constructs an instance.

param
opcode {@code Opcodes.isValid();} the opcode value itself
param
family {@code Opcodes.isValid();} the opcode family
param
nextOpcode {@code Opcodes.isValid();} what opcode (by number) to try next when attempting to match an opcode to particular arguments; {@code Opcodes.NO_NEXT} to indicate that this is the last opcode to try in a particular chain
param
format {@code non-null;} the instruction format
param
hasResult whether the opcode has a result register; if so it is always the first register

        if (!Opcodes.isValidShape(opcode)) {
            throw new IllegalArgumentException("bogus opcode");
        }

        if (!Opcodes.isValidShape(family)) {
            throw new IllegalArgumentException("bogus family");
        }

        if (!Opcodes.isValidShape(nextOpcode)) {
            throw new IllegalArgumentException("bogus nextOpcode");
        }

        if (format == null) {
            throw new NullPointerException("format == null");
        }

        this.opcode = opcode;
        this.family = family;
        this.nextOpcode = nextOpcode;
        this.format = format;
        this.hasResult = hasResult;
    
Methods Summary
public intgetFamily()
Gets the opcode family. The opcode family is the unmarked (no "/...") opcode that has equivalent semantics to this one.

return
{@code Opcodes.MIN_VALUE..Opcodes.MAX_VALUE;} the opcode family

        return family;
    
public InsnFormatgetFormat()
Gets the instruction format.

return
{@code non-null;} the instruction format

        return format;
    
public java.lang.StringgetName()
Gets the opcode name.

return
{@code non-null;} the opcode name

        return OpcodeInfo.getName(opcode);
    
public intgetNextOpcode()
Gets the opcode value to try next when attempting to match an opcode to particular arguments. This returns {@code Opcodes.NO_NEXT} to indicate that this is the last opcode to try in a particular chain.

return
{@code Opcodes.MIN_VALUE..Opcodes.MAX_VALUE;} the opcode value

        return nextOpcode;
    
public intgetOpcode()
Gets the opcode value.

return
{@code Opcodes.MIN_VALUE..Opcodes.MAX_VALUE;} the opcode value

        return opcode;
    
public com.android.dx.dex.code.DopgetOppositeTest()
Gets the opcode for the opposite test of this instance. This is only valid for opcodes which are in fact tests.

return
{@code non-null;} the opposite test

        switch (opcode) {
            case Opcodes.IF_EQ:  return Dops.IF_NE;
            case Opcodes.IF_NE:  return Dops.IF_EQ;
            case Opcodes.IF_LT:  return Dops.IF_GE;
            case Opcodes.IF_GE:  return Dops.IF_LT;
            case Opcodes.IF_GT:  return Dops.IF_LE;
            case Opcodes.IF_LE:  return Dops.IF_GT;
            case Opcodes.IF_EQZ: return Dops.IF_NEZ;
            case Opcodes.IF_NEZ: return Dops.IF_EQZ;
            case Opcodes.IF_LTZ: return Dops.IF_GEZ;
            case Opcodes.IF_GEZ: return Dops.IF_LTZ;
            case Opcodes.IF_GTZ: return Dops.IF_LEZ;
            case Opcodes.IF_LEZ: return Dops.IF_GTZ;
        }

        throw new IllegalArgumentException("bogus opcode: " + this);
    
public booleanhasResult()
Returns whether this opcode uses a result register.

return
{@code true} iff this opcode uses a result register

        return hasResult;
    
public java.lang.StringtoString()
{@inheritDoc}

        return getName();