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_aggressiveprivate DecompilerContext_contextprivate Block_method(package private) StrongBox<Expression>_tempExpression(package private) StrongBox<Variable>_tempVariableprivate 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) voidanalyzeMethod()(package private) voidanalyzeNode(Node node)(package private) static booleancanBeExpressionStatement(Expression expression)private booleancanInline(boolean aggressive, Variable variable)(package private) booleancanPerformCopyPropagation(Expression expr, Variable copyVariable)(package private) voidcopyPropagation()(package private) static intcount(java.util.Map<Variable,MutableInteger> map, Variable variable)(package private) java.lang.BooleanfindLoadInNext(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 booleanhasNoSideEffect(Expression expression)private static voidincrement(java.util.Map<Variable,MutableInteger> map, Variable variable)(package private) booleaninlineAllInBasicBlock(BasicBlock basicBlock)(package private) booleaninlineAllInBlock(Block block)(package private) booleaninlineAllVariables()(package private) booleaninlineIfPossible(Variable variable, Expression inlinedExpression, Node next, boolean aggressive)(package private) booleaninlineIfPossible(java.util.List<Node> body, MutableInteger position)(package private) intinlineInto(java.util.List<Node> body, int position, boolean aggressive)(package private) booleaninlineOneIfPossible(java.util.List<Node> body, int position, boolean aggressive)(package private) static booleanisSafeForInlineOver(Expression expression, Expression expressionBeingMoved)private booleannonAggressiveInlineInto(Expression next, Expression parent, Expression inlinedExpression)private booleannotFromMetadata(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)
-
-