package udg.useDefAnalysis.environments; import java.util.LinkedList; import udg.ASTProvider; public class ArgumentEnvironment extends EmitDefAndUseEnvironment { boolean isTainted = false; public void addChildSymbols(LinkedList<String> childSymbols, ASTProvider child) { if (isDef(child)){ // For tainted arguments, add "* symbol" instead of symbol // to defined symbols. Make an exception if symbol starts with '& ' LinkedList<String> derefChildSymbols = new LinkedList<String>(); for(String symbol : childSymbols){ if(!symbol.startsWith("& ")){ derefChildSymbols.add("* " + symbol); // !patch to see if we can detect macro-sources! derefChildSymbols.add(symbol); }else derefChildSymbols.add(symbol.substring(2)); } defSymbols.addAll(derefChildSymbols); } if (isUse(child)) useSymbols.addAll(childSymbols); } public boolean isUse(ASTProvider child) { return true; } public boolean isDef(ASTProvider child) { return isTainted; } public void setIsTainted() { isTainted = true; } }