Search in sources :

Example 1 with DirectInvokeMethodExpression

use of de.mirkosertic.bytecoder.ssa.DirectInvokeMethodExpression in project Bytecoder by mirkosertic.

the class WASMSSAWriter method writeExpression.

private void writeExpression(Expression aExpression) {
    if (options.isDebugOutput()) {
        String theComment = aExpression.getComment();
        if (theComment != null && !theComment.isEmpty()) {
            print(";; ");
            println(theComment);
        }
    }
    if (aExpression instanceof CheckCastExpression) {
        return;
    }
    if (aExpression instanceof ReturnExpression) {
        writeReturnExpression((ReturnExpression) aExpression);
        return;
    }
    if (aExpression instanceof VariableAssignmentExpression) {
        writeInitVariableExpression((VariableAssignmentExpression) aExpression);
        return;
    }
    if (aExpression instanceof DirectInvokeMethodExpression) {
        writeDirectMethodInvokeExpression((DirectInvokeMethodExpression) aExpression);
        return;
    }
    if (aExpression instanceof IFExpression) {
        writeIFExpression((IFExpression) aExpression);
        return;
    }
    if (aExpression instanceof GotoExpression) {
        writeGotoExpression((GotoExpression) aExpression);
        return;
    }
    if (aExpression instanceof ReturnValueExpression) {
        writeReturnExpression((ReturnValueExpression) aExpression);
        return;
    }
    if (aExpression instanceof PutFieldExpression) {
        writePutFieldExpression((PutFieldExpression) aExpression);
        return;
    }
    if (aExpression instanceof SetMemoryLocationExpression) {
        writeSetMemoryLocationExpression((SetMemoryLocationExpression) aExpression);
        return;
    }
    if (aExpression instanceof PutStaticExpression) {
        writePutStaticExpression((PutStaticExpression) aExpression);
        return;
    }
    if (aExpression instanceof InvokeStaticMethodExpression) {
        writeInvokeStaticExpression((InvokeStaticMethodExpression) aExpression);
        return;
    }
    if (aExpression instanceof ThrowExpression) {
        writeThrowExpression((ThrowExpression) aExpression);
        return;
    }
    if (aExpression instanceof ArrayStoreExpression) {
        writeArrayStoreExpression((ArrayStoreExpression) aExpression);
        return;
    }
    if (aExpression instanceof InvokeVirtualMethodExpression) {
        writeInvokeVirtualExpression((InvokeVirtualMethodExpression) aExpression);
        return;
    }
    if (aExpression instanceof TableSwitchExpression) {
        writeTableSwitchExpression((TableSwitchExpression) aExpression);
        return;
    }
    if (aExpression instanceof LookupSwitchExpression) {
        writeLookupSwitchExpression((LookupSwitchExpression) aExpression);
        return;
    }
    if (aExpression instanceof UnreachableExpression) {
        writeUnreachable((UnreachableExpression) aExpression);
        return;
    }
    if (aExpression instanceof BreakExpression) {
        BreakExpression theBreak = (BreakExpression) aExpression;
        if (theBreak.isSetLabelRequired()) {
            print("(set_local $__label__ (i32.const ");
            print(theBreak.jumpTarget().getAddress());
            println("))");
        }
        if (!theBreak.isSilent()) {
            print("(br $");
            print(theBreak.blockToBreak().name());
            println(")");
        }
        return;
    }
    if (aExpression instanceof ContinueExpression) {
        ContinueExpression theContinue = (ContinueExpression) aExpression;
        print("(set_local $__label__ (i32.const ");
        print(theContinue.jumpTarget().getAddress());
        println("))");
        print("(br $");
        print(theContinue.labelToReturnTo().name());
        println("_inner)");
        return;
    }
    throw new IllegalStateException("Not supported : " + aExpression);
}
Also used : LookupSwitchExpression(de.mirkosertic.bytecoder.ssa.LookupSwitchExpression) ThrowExpression(de.mirkosertic.bytecoder.ssa.ThrowExpression) IFExpression(de.mirkosertic.bytecoder.ssa.IFExpression) PutStaticExpression(de.mirkosertic.bytecoder.ssa.PutStaticExpression) DirectInvokeMethodExpression(de.mirkosertic.bytecoder.ssa.DirectInvokeMethodExpression) PutFieldExpression(de.mirkosertic.bytecoder.ssa.PutFieldExpression) InvokeStaticMethodExpression(de.mirkosertic.bytecoder.ssa.InvokeStaticMethodExpression) BreakExpression(de.mirkosertic.bytecoder.ssa.BreakExpression) VariableAssignmentExpression(de.mirkosertic.bytecoder.ssa.VariableAssignmentExpression) TableSwitchExpression(de.mirkosertic.bytecoder.ssa.TableSwitchExpression) ReturnValueExpression(de.mirkosertic.bytecoder.ssa.ReturnValueExpression) ReturnExpression(de.mirkosertic.bytecoder.ssa.ReturnExpression) ArrayStoreExpression(de.mirkosertic.bytecoder.ssa.ArrayStoreExpression) GotoExpression(de.mirkosertic.bytecoder.ssa.GotoExpression) CheckCastExpression(de.mirkosertic.bytecoder.ssa.CheckCastExpression) InvokeVirtualMethodExpression(de.mirkosertic.bytecoder.ssa.InvokeVirtualMethodExpression) ContinueExpression(de.mirkosertic.bytecoder.ssa.ContinueExpression) SetMemoryLocationExpression(de.mirkosertic.bytecoder.ssa.SetMemoryLocationExpression) UnreachableExpression(de.mirkosertic.bytecoder.ssa.UnreachableExpression)

Example 2 with DirectInvokeMethodExpression

use of de.mirkosertic.bytecoder.ssa.DirectInvokeMethodExpression in project Bytecoder by mirkosertic.

the class InvokeVirtualOptimizer method visit.

private Optional<DirectInvokeMethodExpression> visit(InvokeVirtualMethodExpression aExpression, BytecodeLinkerContext aLinkerContext) {
    String theMethodName = aExpression.getMethodName();
    BytecodeMethodSignature theSignature = aExpression.getSignature();
    BytecodeVirtualMethodIdentifier theIdentifier = aLinkerContext.getMethodCollection().toIdentifier(theMethodName, theSignature);
    List<BytecodeLinkedClass> theLinkedClasses = aLinkerContext.getClassesImplementingVirtualMethod(theIdentifier);
    if (theLinkedClasses.size() == 1) {
        // There is only one class implementing this method, so we can make a direct call
        BytecodeLinkedClass theLinked = theLinkedClasses.get(0);
        if (!theLinked.emulatedByRuntime()) {
            BytecodeMethod theMethod = theLinked.getBytecodeClass().methodByNameAndSignatureOrNull(theMethodName, theSignature);
            if (!theMethod.getAccessFlags().isAbstract()) {
                BytecodeObjectTypeRef theClazz = theLinked.getClassName();
                DirectInvokeMethodExpression theNewExpression = new DirectInvokeMethodExpression(theClazz, theMethodName, theSignature);
                aExpression.routeIncomingDataFlowsTo(theNewExpression);
                return Optional.of(theNewExpression);
            }
        }
    }
    return Optional.empty();
}
Also used : BytecodeVirtualMethodIdentifier(de.mirkosertic.bytecoder.core.BytecodeVirtualMethodIdentifier) BytecodeMethodSignature(de.mirkosertic.bytecoder.core.BytecodeMethodSignature) BytecodeObjectTypeRef(de.mirkosertic.bytecoder.core.BytecodeObjectTypeRef) BytecodeMethod(de.mirkosertic.bytecoder.core.BytecodeMethod) BytecodeLinkedClass(de.mirkosertic.bytecoder.core.BytecodeLinkedClass) DirectInvokeMethodExpression(de.mirkosertic.bytecoder.ssa.DirectInvokeMethodExpression)

Example 3 with DirectInvokeMethodExpression

use of de.mirkosertic.bytecoder.ssa.DirectInvokeMethodExpression in project Bytecoder by mirkosertic.

the class InvokeVirtualOptimizer method visit.

private void visit(VariableAssignmentExpression aExpression, BytecodeLinkerContext aLinkerContext) {
    Value theValue = aExpression.getValue();
    if (theValue instanceof InvokeVirtualMethodExpression) {
        Optional<DirectInvokeMethodExpression> theNewExpression = visit((InvokeVirtualMethodExpression) theValue, aLinkerContext);
        theNewExpression.ifPresent(directInvokeMethodExpression -> aExpression.replaceIncomingDataEdge(theValue, directInvokeMethodExpression));
    }
}
Also used : InvokeVirtualMethodExpression(de.mirkosertic.bytecoder.ssa.InvokeVirtualMethodExpression) Value(de.mirkosertic.bytecoder.ssa.Value) DirectInvokeMethodExpression(de.mirkosertic.bytecoder.ssa.DirectInvokeMethodExpression)

Example 4 with DirectInvokeMethodExpression

use of de.mirkosertic.bytecoder.ssa.DirectInvokeMethodExpression in project Bytecoder by mirkosertic.

the class OpenCLWriter method printValue.

private void printValue(Value aValue) {
    if (aValue instanceof Variable) {
        Variable theVariable = (Variable) aValue;
        print(theVariable.getName());
    } else if (aValue instanceof InvokeVirtualMethodExpression) {
        printInvokeVirtual((InvokeVirtualMethodExpression) aValue);
    } else if (aValue instanceof InvokeStaticMethodExpression) {
        printInvokeStatic((InvokeStaticMethodExpression) aValue);
    } else if (aValue instanceof GetFieldExpression) {
        printGetFieldValue((GetFieldExpression) aValue);
    } else if (aValue instanceof ArrayEntryExpression) {
        printArrayEntryValue((ArrayEntryExpression) aValue);
    } else if (aValue instanceof BinaryExpression) {
        printBinaryValue((BinaryExpression) aValue);
    } else if (aValue instanceof IntegerValue) {
        printIntegerValue((IntegerValue) aValue);
    } else if (aValue instanceof LongValue) {
        printLongValue((LongValue) aValue);
    } else if (aValue instanceof FloatValue) {
        printFloatValue((FloatValue) aValue);
    } else if (aValue instanceof DoubleValue) {
        printDoubleValue((DoubleValue) aValue);
    } else if (aValue instanceof TypeConversionExpression) {
        printTypeConversionValue((TypeConversionExpression) aValue);
    } else if (aValue instanceof CompareExpression) {
        printCompareExpression((CompareExpression) aValue);
    } else if (aValue instanceof DirectInvokeMethodExpression) {
        printDirectInvokeMethodExpression((DirectInvokeMethodExpression) aValue);
    } else {
        throw new IllegalArgumentException("Not supported : " + aValue);
    }
}
Also used : Variable(de.mirkosertic.bytecoder.ssa.Variable) IntegerValue(de.mirkosertic.bytecoder.ssa.IntegerValue) GetFieldExpression(de.mirkosertic.bytecoder.ssa.GetFieldExpression) CompareExpression(de.mirkosertic.bytecoder.ssa.CompareExpression) DirectInvokeMethodExpression(de.mirkosertic.bytecoder.ssa.DirectInvokeMethodExpression) InvokeStaticMethodExpression(de.mirkosertic.bytecoder.ssa.InvokeStaticMethodExpression) InvokeVirtualMethodExpression(de.mirkosertic.bytecoder.ssa.InvokeVirtualMethodExpression) BinaryExpression(de.mirkosertic.bytecoder.ssa.BinaryExpression) DoubleValue(de.mirkosertic.bytecoder.ssa.DoubleValue) TypeConversionExpression(de.mirkosertic.bytecoder.ssa.TypeConversionExpression) LongValue(de.mirkosertic.bytecoder.ssa.LongValue) FloatValue(de.mirkosertic.bytecoder.ssa.FloatValue) ArrayEntryExpression(de.mirkosertic.bytecoder.ssa.ArrayEntryExpression)

Example 5 with DirectInvokeMethodExpression

use of de.mirkosertic.bytecoder.ssa.DirectInvokeMethodExpression in project Bytecoder by mirkosertic.

the class JSSSAWriter method writeExpressions.

private void writeExpressions(ExpressionList aExpressions) {
    for (Expression theExpression : aExpressions.toList()) {
        if (options.isDebugOutput()) {
            String theComment = theExpression.getComment();
            if (theComment != null && !theComment.isEmpty()) {
                print("// ");
                println(theComment);
            }
        }
        if (theExpression instanceof ReturnExpression) {
            ReturnExpression theE = (ReturnExpression) theExpression;
            print("return");
            println(";");
        } else if (theExpression instanceof VariableAssignmentExpression) {
            VariableAssignmentExpression theE = (VariableAssignmentExpression) theExpression;
            Variable theVariable = theE.getVariable();
            Value theValue = theE.getValue();
            if (theValue instanceof ComputedMemoryLocationWriteExpression) {
                continue;
            }
            if (!program.isGlobalVariable(theVariable)) {
                print("var ");
            }
            print(theVariable.getName());
            print(" = ");
            print(theValue);
            print("; // type is ");
            println(theVariable.resolveType().resolve().name() + " value type is " + theValue.resolveType());
        } else if (theExpression instanceof PutStaticExpression) {
            PutStaticExpression theE = (PutStaticExpression) theExpression;
            BytecodeFieldRefConstant theField = theE.getField();
            Value theValue = theE.incomingDataFlows().get(0);
            printStaticFieldReference(theField);
            print(" = ");
            print(theValue);
            println(";");
        } else if (theExpression instanceof ReturnValueExpression) {
            ReturnValueExpression theE = (ReturnValueExpression) theExpression;
            Value theValue = theE.incomingDataFlows().get(0);
            print("return ");
            print(theValue);
            println(";");
        } else if (theExpression instanceof ThrowExpression) {
            ThrowExpression theE = (ThrowExpression) theExpression;
            Value theValue = theE.incomingDataFlows().get(0);
            print("throw ");
            print(theValue);
            println(";");
        } else if (theExpression instanceof InvokeVirtualMethodExpression) {
            InvokeVirtualMethodExpression theE = (InvokeVirtualMethodExpression) theExpression;
            print(theE);
            println(";");
        } else if (theExpression instanceof DirectInvokeMethodExpression) {
            DirectInvokeMethodExpression theE = (DirectInvokeMethodExpression) theExpression;
            print(theE);
            println(";");
        } else if (theExpression instanceof InvokeStaticMethodExpression) {
            InvokeStaticMethodExpression theE = (InvokeStaticMethodExpression) theExpression;
            print(theE);
            println(";");
        } else if (theExpression instanceof PutFieldExpression) {
            PutFieldExpression theE = (PutFieldExpression) theExpression;
            List<Value> theIncomingData = theE.incomingDataFlows();
            Value theTarget = theIncomingData.get(0);
            BytecodeFieldRefConstant theField = theE.getField();
            Value thevalue = theIncomingData.get(1);
            print(theTarget);
            printInstanceFieldReference(theField);
            print(" = ");
            print(thevalue);
            println(";");
        } else if (theExpression instanceof IFExpression) {
            IFExpression theE = (IFExpression) theExpression;
            print("if (");
            print(theE.incomingDataFlows().get(0));
            println(") {");
            withDeeperIndent().writeExpressions(theE.getExpressions());
            println("}");
        } else if (theExpression instanceof GotoExpression) {
            GotoExpression theE = (GotoExpression) theExpression;
            println(generateJumpCodeFor(theE.getJumpTarget()));
        } else if (theExpression instanceof ArrayStoreExpression) {
            ArrayStoreExpression theE = (ArrayStoreExpression) theExpression;
            List<Value> theIncomingData = theE.incomingDataFlows();
            Value theArray = theIncomingData.get(0);
            Value theIndex = theIncomingData.get(1);
            Value theValue = theIncomingData.get(2);
            print(theArray);
            printArrayIndexReference(theIndex);
            print(" = ");
            print(theValue);
            println(";");
        } else if (theExpression instanceof CheckCastExpression) {
            CheckCastExpression theE = (CheckCastExpression) theExpression;
        // Completely ignored
        } else if (theExpression instanceof TableSwitchExpression) {
            TableSwitchExpression theE = (TableSwitchExpression) theExpression;
            Value theValue = theE.incomingDataFlows().get(0);
            print("if (");
            print(theValue);
            print(" < ");
            print(theE.getLowValue());
            print(" || ");
            print(theValue);
            print(" > ");
            print(theE.getHighValue());
            println(") {");
            print(" ");
            writeExpressions(theE.getDefaultExpressions());
            println("}");
            print("switch(");
            print(theValue);
            print(" - ");
            print(theE.getLowValue());
            println(") {");
            for (Map.Entry<Long, ExpressionList> theEntry : theE.getOffsets().entrySet()) {
                print(" case ");
                print(theEntry.getKey());
                println(":");
                print("     ");
                writeExpressions(theEntry.getValue());
            }
            println("}");
            println("throw 'Illegal jump target!';");
        } else if (theExpression instanceof LookupSwitchExpression) {
            LookupSwitchExpression theE = (LookupSwitchExpression) theExpression;
            print("switch(");
            print(theE.incomingDataFlows().get(0));
            println(") {");
            for (Map.Entry<Long, ExpressionList> theEntry : theE.getPairs().entrySet()) {
                print(" case ");
                print(theEntry.getKey());
                println(":");
                print("     ");
                writeExpressions(theEntry.getValue());
            }
            println("}");
            writeExpressions(theE.getDefaultExpressions());
        } else if (theExpression instanceof SetMemoryLocationExpression) {
            SetMemoryLocationExpression theE = (SetMemoryLocationExpression) theExpression;
            List<Value> theIncomingData = theE.incomingDataFlows();
            print("bytecoderGlobalMemory[");
            ComputedMemoryLocationWriteExpression theValue = (ComputedMemoryLocationWriteExpression) theIncomingData.get(0);
            print(theValue);
            print("] = ");
            print(theIncomingData.get(1));
            println(";");
        } else if (theExpression instanceof UnreachableExpression) {
            println("throw 'Unreachable';");
        } else if (theExpression instanceof BreakExpression) {
            BreakExpression theBreak = (BreakExpression) theExpression;
            if (theBreak.isSetLabelRequired()) {
                print("__label__ = ");
                print(theBreak.jumpTarget().getAddress());
                println(";");
            }
            if (!theBreak.isSilent()) {
                print("break $");
                print(theBreak.blockToBreak().name());
                println(";");
            }
        } else if (theExpression instanceof ContinueExpression) {
            ContinueExpression theContinue = (ContinueExpression) theExpression;
            print("__label__ = ");
            print(theContinue.jumpTarget().getAddress());
            println(";");
            print("continue $");
            print(theContinue.labelToReturnTo().name());
            println(";");
        } else {
            throw new IllegalStateException("Not implemented : " + theExpression);
        }
    }
}
Also used : Variable(de.mirkosertic.bytecoder.ssa.Variable) LookupSwitchExpression(de.mirkosertic.bytecoder.ssa.LookupSwitchExpression) DirectInvokeMethodExpression(de.mirkosertic.bytecoder.ssa.DirectInvokeMethodExpression) PutFieldExpression(de.mirkosertic.bytecoder.ssa.PutFieldExpression) InvokeStaticMethodExpression(de.mirkosertic.bytecoder.ssa.InvokeStaticMethodExpression) VariableAssignmentExpression(de.mirkosertic.bytecoder.ssa.VariableAssignmentExpression) ReturnExpression(de.mirkosertic.bytecoder.ssa.ReturnExpression) InvokeVirtualMethodExpression(de.mirkosertic.bytecoder.ssa.InvokeVirtualMethodExpression) CheckCastExpression(de.mirkosertic.bytecoder.ssa.CheckCastExpression) ContinueExpression(de.mirkosertic.bytecoder.ssa.ContinueExpression) SetMemoryLocationExpression(de.mirkosertic.bytecoder.ssa.SetMemoryLocationExpression) ExpressionList(de.mirkosertic.bytecoder.ssa.ExpressionList) List(java.util.List) ComputedMemoryLocationWriteExpression(de.mirkosertic.bytecoder.ssa.ComputedMemoryLocationWriteExpression) ExpressionList(de.mirkosertic.bytecoder.ssa.ExpressionList) ThrowExpression(de.mirkosertic.bytecoder.ssa.ThrowExpression) PutStaticExpression(de.mirkosertic.bytecoder.ssa.PutStaticExpression) IFExpression(de.mirkosertic.bytecoder.ssa.IFExpression) BreakExpression(de.mirkosertic.bytecoder.ssa.BreakExpression) TableSwitchExpression(de.mirkosertic.bytecoder.ssa.TableSwitchExpression) ReturnValueExpression(de.mirkosertic.bytecoder.ssa.ReturnValueExpression) ArrayStoreExpression(de.mirkosertic.bytecoder.ssa.ArrayStoreExpression) GotoExpression(de.mirkosertic.bytecoder.ssa.GotoExpression) CheckCastExpression(de.mirkosertic.bytecoder.ssa.CheckCastExpression) InstanceOfExpression(de.mirkosertic.bytecoder.ssa.InstanceOfExpression) TypeConversionExpression(de.mirkosertic.bytecoder.ssa.TypeConversionExpression) NegatedExpression(de.mirkosertic.bytecoder.ssa.NegatedExpression) InvokeStaticMethodExpression(de.mirkosertic.bytecoder.ssa.InvokeStaticMethodExpression) NewObjectExpression(de.mirkosertic.bytecoder.ssa.NewObjectExpression) ReturnValueExpression(de.mirkosertic.bytecoder.ssa.ReturnValueExpression) MethodHandlesGeneratedLookupExpression(de.mirkosertic.bytecoder.ssa.MethodHandlesGeneratedLookupExpression) SetMemoryLocationExpression(de.mirkosertic.bytecoder.ssa.SetMemoryLocationExpression) ArrayStoreExpression(de.mirkosertic.bytecoder.ssa.ArrayStoreExpression) MethodTypeExpression(de.mirkosertic.bytecoder.ssa.MethodTypeExpression) LookupSwitchExpression(de.mirkosertic.bytecoder.ssa.LookupSwitchExpression) TypeOfExpression(de.mirkosertic.bytecoder.ssa.TypeOfExpression) FixedBinaryExpression(de.mirkosertic.bytecoder.ssa.FixedBinaryExpression) NewArrayExpression(de.mirkosertic.bytecoder.ssa.NewArrayExpression) MemorySizeExpression(de.mirkosertic.bytecoder.ssa.MemorySizeExpression) CurrentExceptionExpression(de.mirkosertic.bytecoder.ssa.CurrentExceptionExpression) ComputedMemoryLocationWriteExpression(de.mirkosertic.bytecoder.ssa.ComputedMemoryLocationWriteExpression) MethodRefExpression(de.mirkosertic.bytecoder.ssa.MethodRefExpression) PutStaticExpression(de.mirkosertic.bytecoder.ssa.PutStaticExpression) FloorExpression(de.mirkosertic.bytecoder.ssa.FloorExpression) ArrayLengthExpression(de.mirkosertic.bytecoder.ssa.ArrayLengthExpression) ComputedMemoryLocationReadExpression(de.mirkosertic.bytecoder.ssa.ComputedMemoryLocationReadExpression) InvokeVirtualMethodExpression(de.mirkosertic.bytecoder.ssa.InvokeVirtualMethodExpression) SqrtExpression(de.mirkosertic.bytecoder.ssa.SqrtExpression) CompareExpression(de.mirkosertic.bytecoder.ssa.CompareExpression) StackTopExpression(de.mirkosertic.bytecoder.ssa.StackTopExpression) DirectInvokeMethodExpression(de.mirkosertic.bytecoder.ssa.DirectInvokeMethodExpression) GotoExpression(de.mirkosertic.bytecoder.ssa.GotoExpression) VariableAssignmentExpression(de.mirkosertic.bytecoder.ssa.VariableAssignmentExpression) NewMultiArrayExpression(de.mirkosertic.bytecoder.ssa.NewMultiArrayExpression) ReturnExpression(de.mirkosertic.bytecoder.ssa.ReturnExpression) UnreachableExpression(de.mirkosertic.bytecoder.ssa.UnreachableExpression) BinaryExpression(de.mirkosertic.bytecoder.ssa.BinaryExpression) GetFieldExpression(de.mirkosertic.bytecoder.ssa.GetFieldExpression) ContinueExpression(de.mirkosertic.bytecoder.ssa.ContinueExpression) RuntimeGeneratedTypeExpression(de.mirkosertic.bytecoder.ssa.RuntimeGeneratedTypeExpression) IFExpression(de.mirkosertic.bytecoder.ssa.IFExpression) ResolveCallsiteObjectExpression(de.mirkosertic.bytecoder.ssa.ResolveCallsiteObjectExpression) ArrayEntryExpression(de.mirkosertic.bytecoder.ssa.ArrayEntryExpression) Expression(de.mirkosertic.bytecoder.ssa.Expression) PutFieldExpression(de.mirkosertic.bytecoder.ssa.PutFieldExpression) UnknownExpression(de.mirkosertic.bytecoder.ssa.UnknownExpression) GetStaticExpression(de.mirkosertic.bytecoder.ssa.GetStaticExpression) TableSwitchExpression(de.mirkosertic.bytecoder.ssa.TableSwitchExpression) ThrowExpression(de.mirkosertic.bytecoder.ssa.ThrowExpression) BreakExpression(de.mirkosertic.bytecoder.ssa.BreakExpression) StringValue(de.mirkosertic.bytecoder.ssa.StringValue) ByteValue(de.mirkosertic.bytecoder.ssa.ByteValue) Value(de.mirkosertic.bytecoder.ssa.Value) ClassReferenceValue(de.mirkosertic.bytecoder.ssa.ClassReferenceValue) SelfReferenceParameterValue(de.mirkosertic.bytecoder.ssa.SelfReferenceParameterValue) FloatValue(de.mirkosertic.bytecoder.ssa.FloatValue) NullValue(de.mirkosertic.bytecoder.ssa.NullValue) DoubleValue(de.mirkosertic.bytecoder.ssa.DoubleValue) IntegerValue(de.mirkosertic.bytecoder.ssa.IntegerValue) LongValue(de.mirkosertic.bytecoder.ssa.LongValue) MethodParameterValue(de.mirkosertic.bytecoder.ssa.MethodParameterValue) ShortValue(de.mirkosertic.bytecoder.ssa.ShortValue) UnreachableExpression(de.mirkosertic.bytecoder.ssa.UnreachableExpression) BytecodeFieldRefConstant(de.mirkosertic.bytecoder.core.BytecodeFieldRefConstant) Map(java.util.Map)

Aggregations

DirectInvokeMethodExpression (de.mirkosertic.bytecoder.ssa.DirectInvokeMethodExpression)5 InvokeVirtualMethodExpression (de.mirkosertic.bytecoder.ssa.InvokeVirtualMethodExpression)4 InvokeStaticMethodExpression (de.mirkosertic.bytecoder.ssa.InvokeStaticMethodExpression)3 ArrayEntryExpression (de.mirkosertic.bytecoder.ssa.ArrayEntryExpression)2 ArrayStoreExpression (de.mirkosertic.bytecoder.ssa.ArrayStoreExpression)2 BinaryExpression (de.mirkosertic.bytecoder.ssa.BinaryExpression)2 BreakExpression (de.mirkosertic.bytecoder.ssa.BreakExpression)2 CheckCastExpression (de.mirkosertic.bytecoder.ssa.CheckCastExpression)2 CompareExpression (de.mirkosertic.bytecoder.ssa.CompareExpression)2 ContinueExpression (de.mirkosertic.bytecoder.ssa.ContinueExpression)2 DoubleValue (de.mirkosertic.bytecoder.ssa.DoubleValue)2 FloatValue (de.mirkosertic.bytecoder.ssa.FloatValue)2 GetFieldExpression (de.mirkosertic.bytecoder.ssa.GetFieldExpression)2 GotoExpression (de.mirkosertic.bytecoder.ssa.GotoExpression)2 IFExpression (de.mirkosertic.bytecoder.ssa.IFExpression)2 IntegerValue (de.mirkosertic.bytecoder.ssa.IntegerValue)2 LongValue (de.mirkosertic.bytecoder.ssa.LongValue)2 LookupSwitchExpression (de.mirkosertic.bytecoder.ssa.LookupSwitchExpression)2 TypeConversionExpression (de.mirkosertic.bytecoder.ssa.TypeConversionExpression)2 Value (de.mirkosertic.bytecoder.ssa.Value)2