public final class TrapTightener extends BodyTransformer
BodyTransformer that shrinks the protected area covered
by each Trap in the Body so that it begins at the first of
the Body's Units which might throw an exception caught by
the Trap and ends just after the last Unit which might
throw an exception caught by the Trap. In the case where none
of the Units protected by a Trap can throw the exception
it catches, the Trap's protected area is left completely empty,
which will likely cause the UnreachableCodeEliminator to remove the
Trap completely.
The TrapTightener is used to reduce the risk of
unverifiable code which can result from the use of ExceptionalUnitGraphs from which unrealizable exceptional
control flow edges have been removed.| Constructor and Description |
|---|
TrapTightener(Singletons.Global g) |
| Modifier and Type | Method and Description |
|---|---|
protected void |
internalTransform(Body body,
java.lang.String phaseName,
java.util.Map options)
This method is called to perform the transformation itself.
|
protected boolean |
mightThrowTo(ExceptionalUnitGraph g,
Unit u,
Trap t)
|
static TrapTightener |
v() |
transform, transform, transformpublic TrapTightener(Singletons.Global g)
public static TrapTightener v()
protected void internalTransform(Body body, java.lang.String phaseName, java.util.Map options)
BodyTransformerinternalTransform in class BodyTransformerbody - the body on which to apply the transformationphaseName - the phasename for this transform; not typically used by implementations.options - the actual computed options; a combination of default options and Scene specified options.protected boolean mightThrowTo(ExceptionalUnitGraph g, Unit u, Trap t)
Unit
might throw an exception to a particular Trap, according to
the information supplied by a particular control flow graph.g - The control flow graph providing information about exceptions.u - The unit being inquired about.t - The trap being inquired about.Copyright © 2012-2019 RoboVM AB. All Rights Reserved.