예제 #1
0
 @Override
 public void visit(VariableExpr expr) {
   int index = expr.getIndex();
   resultExpr = expr;
   if (readFrequencies[index] != 1 || preservedVars[index]) {
     return;
   }
   if (resultSequence.isEmpty()) {
     return;
   }
   Statement last = resultSequence.get(resultSequence.size() - 1);
   if (!(last instanceof AssignmentStatement)) {
     return;
   }
   AssignmentStatement assignment = (AssignmentStatement) last;
   if (assignment.isAsync()) {
     return;
   }
   if (!(assignment.getLeftValue() instanceof VariableExpr)) {
     return;
   }
   VariableExpr var = (VariableExpr) assignment.getLeftValue();
   if (var.getLocation() != null
       && assignment.getLocation() != null
       && !assignment.getLocation().equals(var.getLocation())) {
     return;
   }
   if (var.getIndex() == index) {
     resultSequence.remove(resultSequence.size() - 1);
     assignment.getRightValue().setLocation(assignment.getLocation());
     assignment.getRightValue().acceptVisitor(this);
   }
 }