public Object visitStmtVarDecl(StmtVarDecl stmt) { // Make sure the variable declaration stays first. This will // have no initializers, except for where there is an array // initializer. ArrayList newInits = new ArrayList(stmt.getNumVars()); for (int i = 0; i < stmt.getNumVars(); i++) { // if (stmt.getInit(i) instanceof ExprArrayInit) { // newInits.add(stmt.getInit(i)); // } else { newInits.add(null); // } } Statement newDecl = new StmtVarDecl(stmt, stmt.getTypes(), stmt.getNames(), newInits); addStatement(newDecl); // Now go through the original statement; if there are // any initializers, create a new assignment statement. for (int i = 0; i < stmt.getNumVars(); i++) { String name = stmt.getName(i); Expression init = stmt.getInit(i); // don't separate array initializations, because it become // illegal syntax if (init != null) // && !(init instanceof ExprArrayInit)) { Statement assign = new StmtAssign(new ExprVar(stmt, name), init); addStatement(assign); } } // Already added the base statement. return null; }
public Object visitStmtVarDecl(StmtVarDecl stmt) { if (collecting) { for (int i = 0; i < stmt.getNumVars(); i++) { String name = stmt.getName(i); if (variables.get(name) == null) variables.put(name, stmt); } return stmt; } // take care of variable substitution in the initializers first stmt = (StmtVarDecl) super.visitStmtVarDecl(stmt); List<String> names = new ArrayList<String>(stmt.getNames()); boolean change = false; for (int i = 0; i < stmt.getNumVars(); i++) { final String name = names.get(i); if (variables.get(name) != stmt) { for (int suff = 2; ; suff++) { final String newName = name + suff; if (variables.get(newName) == null) { names.set(i, newName); renameMap.put(name, newName); variables.put(newName, newName); change = true; break; } } } } if (change) { stmt = new StmtVarDecl(stmt, stmt.getTypes(), names, stmt.getInits()); } return stmt; }