Package com.strobel.decompiler.ast
Class Inlining
- java.lang.Object
-
- com.strobel.decompiler.ast.Inlining
-
final class Inlining extends java.lang.Object
-
-
Field Summary
Fields Modifier and Type Field Description private boolean
_aggressive
private DecompilerContext
_context
private Block
_method
(package private) StrongBox<Expression>
_tempExpression
(package private) StrongBox<Variable>
_tempVariable
private static Predicate<Variable>
IS_FLOAT_VARIABLE
(package private) java.util.Map<Variable,MutableInteger>
loadCounts
(package private) java.util.Map<Variable,java.util.List<Expression>>
loads
(package private) java.util.Map<Variable,MutableInteger>
storeCounts
-
Constructor Summary
Constructors Constructor Description Inlining(DecompilerContext context, Block method)
Inlining(DecompilerContext context, Block method, boolean aggressive)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) void
analyzeMethod()
(package private) void
analyzeNode(Node node)
(package private) static boolean
canBeExpressionStatement(Expression expression)
private boolean
canInline(boolean aggressive, Variable variable)
(package private) boolean
canPerformCopyPropagation(Expression expr, Variable copyVariable)
(package private) void
copyPropagation()
(package private) static int
count(java.util.Map<Variable,MutableInteger> map, Variable variable)
(package private) java.lang.Boolean
findLoadInNext(Expression expression, Variable variable, Expression expressionBeingMoved, StrongBox<Expression> parent, MutableInteger position)
private static java.lang.Iterable<Expression>
getParents(Expression scope, java.util.Map<Expression,Expression> parentLookup, Expression node)
(package private) static boolean
hasNoSideEffect(Expression expression)
private static void
increment(java.util.Map<Variable,MutableInteger> map, Variable variable)
(package private) boolean
inlineAllInBasicBlock(BasicBlock basicBlock)
(package private) boolean
inlineAllInBlock(Block block)
(package private) boolean
inlineAllVariables()
(package private) boolean
inlineIfPossible(Variable variable, Expression inlinedExpression, Node next, boolean aggressive)
(package private) boolean
inlineIfPossible(java.util.List<Node> body, MutableInteger position)
(package private) int
inlineInto(java.util.List<Node> body, int position, boolean aggressive)
(package private) boolean
inlineOneIfPossible(java.util.List<Node> body, int position, boolean aggressive)
(package private) static boolean
isSafeForInlineOver(Expression expression, Expression expressionBeingMoved)
private boolean
nonAggressiveInlineInto(Expression next, Expression parent, Expression inlinedExpression)
private boolean
notFromMetadata(Variable variable)
-
-
-
Field Detail
-
_context
private final DecompilerContext _context
-
_method
private final Block _method
-
_aggressive
private final boolean _aggressive
-
loadCounts
final java.util.Map<Variable,MutableInteger> loadCounts
-
storeCounts
final java.util.Map<Variable,MutableInteger> storeCounts
-
loads
final java.util.Map<Variable,java.util.List<Expression>> loads
-
_tempExpression
final StrongBox<Expression> _tempExpression
-
-
Constructor Detail
-
Inlining
public Inlining(DecompilerContext context, Block method)
-
Inlining
public Inlining(DecompilerContext context, Block method, boolean aggressive)
-
-
Method Detail
-
analyzeMethod
final void analyzeMethod()
-
analyzeNode
final void analyzeNode(Node node)
-
inlineAllVariables
final boolean inlineAllVariables()
-
inlineAllInBlock
final boolean inlineAllInBlock(Block block)
-
inlineAllInBasicBlock
final boolean inlineAllInBasicBlock(BasicBlock basicBlock)
-
inlineIfPossible
final boolean inlineIfPossible(java.util.List<Node> body, MutableInteger position)
-
inlineInto
final int inlineInto(java.util.List<Node> body, int position, boolean aggressive)
-
inlineIfPossible
final boolean inlineIfPossible(Variable variable, Expression inlinedExpression, Node next, boolean aggressive)
-
notFromMetadata
private boolean notFromMetadata(Variable variable)
-
nonAggressiveInlineInto
private boolean nonAggressiveInlineInto(Expression next, Expression parent, Expression inlinedExpression)
-
findLoadInNext
final java.lang.Boolean findLoadInNext(Expression expression, Variable variable, Expression expressionBeingMoved, StrongBox<Expression> parent, MutableInteger position)
-
isSafeForInlineOver
static boolean isSafeForInlineOver(Expression expression, Expression expressionBeingMoved)
-
inlineOneIfPossible
final boolean inlineOneIfPossible(java.util.List<Node> body, int position, boolean aggressive)
-
canInline
private boolean canInline(boolean aggressive, Variable variable)
-
copyPropagation
final void copyPropagation()
-
canPerformCopyPropagation
final boolean canPerformCopyPropagation(Expression expr, Variable copyVariable)
-
hasNoSideEffect
static boolean hasNoSideEffect(Expression expression)
-
canBeExpressionStatement
static boolean canBeExpressionStatement(Expression expression)
-
count
static int count(java.util.Map<Variable,MutableInteger> map, Variable variable)
-
increment
private static void increment(java.util.Map<Variable,MutableInteger> map, Variable variable)
-
getParents
private static java.lang.Iterable<Expression> getParents(Expression scope, java.util.Map<Expression,Expression> parentLookup, Expression node)
-
-