1 19 20 package soot.javaToJimple; 21 import java.util.*; 22 23 public class StrictFPPropagator extends polyglot.visit.NodeVisitor { 24 25 boolean strict = false; 26 public StrictFPPropagator(boolean val){ 27 strict = val; 28 } 29 30 public polyglot.visit.NodeVisitor enter(polyglot.ast.Node parent, polyglot.ast.Node n){ 31 if (n instanceof polyglot.ast.ClassDecl){ 32 if (((polyglot.ast.ClassDecl)n).flags().isStrictFP()){ 33 return new StrictFPPropagator(true); 34 } 35 } 36 if (n instanceof polyglot.ast.LocalClassDecl){ 37 if (((polyglot.ast.LocalClassDecl)n).decl().flags().isStrictFP()){ 38 return new StrictFPPropagator(true); 39 } 40 } 41 if (n instanceof polyglot.ast.MethodDecl){ 42 if (((polyglot.ast.MethodDecl)n).flags().isStrictFP()){ 43 return new StrictFPPropagator(true); 44 } 45 } 46 if (n instanceof polyglot.ast.ConstructorDecl){ 47 if (((polyglot.ast.ConstructorDecl)n).flags().isStrictFP()){ 48 return new StrictFPPropagator(true); 49 } 50 } 51 return this; 52 } 53 54 public polyglot.ast.Node leave(polyglot.ast.Node old, polyglot.ast.Node n, polyglot.visit.NodeVisitor nodeVisitor){ 55 56 if (n instanceof polyglot.ast.MethodDecl) { 57 polyglot.ast.MethodDecl decl = (polyglot.ast.MethodDecl)n; 58 if (strict && !decl.flags().isAbstract() && !decl.flags().isStrictFP()){ 59 decl = decl.flags(decl.flags().StrictFP()); 61 return decl; 63 } 64 } 65 if (n instanceof polyglot.ast.ConstructorDecl) { 66 polyglot.ast.ConstructorDecl decl = (polyglot.ast.ConstructorDecl)n; 67 if (strict && !decl.flags().isAbstract() && !decl.flags().isStrictFP()){ 68 return decl.flags(decl.flags().StrictFP()); 69 } 70 } 71 if (n instanceof polyglot.ast.LocalClassDecl){ 72 polyglot.ast.LocalClassDecl decl = (polyglot.ast.LocalClassDecl)n; 73 if (decl.decl().flags().isStrictFP()){ 74 return decl.decl().flags(decl.decl().flags().clearStrictFP()); 75 } 76 } 77 if (n instanceof polyglot.ast.ClassDecl){ 78 polyglot.ast.ClassDecl decl = (polyglot.ast.ClassDecl)n; 79 if (decl.flags().isStrictFP()){ 80 return decl.flags(decl.flags().clearStrictFP()); 81 } 82 } 83 return n; 84 } 85 86 } 87 | Popular Tags |