01: /* Soot - a J*va Optimization Framework
02: * Copyright (C) 2003 Jennifer Lhotak
03: *
04: * This library is free software; you can redistribute it and/or
05: * modify it under the terms of the GNU Lesser General Public
06: * License as published by the Free Software Foundation; either
07: * version 2.1 of the License, or (at your option) any later version.
08: *
09: * This library is distributed in the hope that it will be useful,
10: * but WITHOUT ANY WARRANTY; without even the implied warranty of
11: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12: * Lesser General Public License for more details.
13: *
14: * You should have received a copy of the GNU Lesser General Public
15: * License along with this library; if not, write to the
16: * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17: * Boston, MA 02111-1307, USA.
18: */
19:
20: package soot.jimple.toolkits.annotation;
21:
22: import soot.*;
23: import java.util.*;
24: import soot.toolkits.graph.*;
25: import soot.jimple.*;
26: import soot.options.*;
27: import soot.jimple.toolkits.pointer.*;
28: import soot.jimple.toolkits.scalar.*;
29:
30: /** A body transformer that records avail expression
31: * information in tags. - both pessimistic and optimistic options*/
32: public class AvailExprTagger extends BodyTransformer {
33: public AvailExprTagger(Singletons.Global g) {
34: }
35:
36: public static AvailExprTagger v() {
37: return G.v().soot_jimple_toolkits_annotation_AvailExprTagger();
38: }
39:
40: protected void internalTransform(Body b, String phaseName, Map opts) {
41:
42: SideEffectTester sideEffect;
43: if (Scene.v().hasCallGraph()
44: && !PhaseOptions.getBoolean(opts, "naive-side-effect")) {
45: sideEffect = new PASideEffectTester();
46: } else {
47: sideEffect = new NaiveSideEffectTester();
48: }
49: sideEffect.newMethod(b.getMethod());
50:
51: AETOptions options = new AETOptions(opts);
52: if (options.kind() == AETOptions.kind_optimistic) {
53: new SlowAvailableExpressionsAnalysis(
54: new ExceptionalUnitGraph(b));
55: } else {
56: new PessimisticAvailableExpressionsAnalysis(
57: new ExceptionalUnitGraph(b), b.getMethod(),
58: sideEffect);
59: }
60: }
61: }
|