Added comments, small bugfix post the long emulation merge in response to review comments.

Suggested by: spoon
Review by: spoon

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@2173 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/DeadCodeElimination.java b/dev/core/src/com/google/gwt/dev/jjs/impl/DeadCodeElimination.java
index c14e418..c3ce727 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/DeadCodeElimination.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/DeadCodeElimination.java
@@ -82,7 +82,17 @@
     private JClassType currentClass;
 
     /**
-     * Expressions whose result does not matter.
+     * Expressions whose result does not matter. A parent node should add any
+     * children whose result does not matter to this set during the parent's
+     * <code>visit()</code> method. It should then remove those children
+     * during its own <code>endVisit()</code>.
+     * 
+     * TODO: there's a latent bug here: some immutable nodes (such as literals)
+     * can be multiply referenced in the AST. In theory, one reference to that
+     * node could be put into this set while another reference actually contains
+     * a result that is needed. In practice this is okay at the moment since the
+     * existing uses of <code>ignoringExpressionOutput</code> are with mutable
+     * nodes.
      */
     private Set<JExpression> ignoringExpressionOutput = new HashSet<JExpression>();
 
@@ -378,6 +388,7 @@
     public void endVisit(JMultiExpression x, Context ctx) {
       List<JExpression> exprs = x.exprs;
       if (exprs.size() > 1) {
+        // Remove the non-final children we previously added.
         List<JExpression> nonFinalChildren = exprs.subList(0, exprs.size() - 1);
         ignoringExpressionOutput.removeAll(nonFinalChildren);
       }
@@ -425,7 +436,7 @@
       if (x.getOp().isModifying()) {
         lvalues.remove(x.getArg());
       }
-      if (x == ignoringExpressionOutput) {
+      if (ignoringExpressionOutput.contains(x)) {
         JPrefixOperation newOp = new JPrefixOperation(program,
             x.getSourceInfo(), x.getOp(), x.getArg());
         ctx.replaceMe(newOp);
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/LongEmulationNormalizer.java b/dev/core/src/com/google/gwt/dev/jjs/impl/LongEmulationNormalizer.java
index bdc3eb8..0127090 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/LongEmulationNormalizer.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/LongEmulationNormalizer.java
@@ -149,7 +149,7 @@
         case AND:

         case OR:

           throw new InternalCompilerException(

-              "AND and OR sould not have long operands");

+              "AND and OR should not have long operands");

 

         case ASG:

           // Nothing to do.

@@ -183,7 +183,7 @@
           return "neg";

         case NOT:

           throw new InternalCompilerException(

-              "NOT sould not have a long operand");

+              "NOT should not have a long operand");

         case BIT_NOT:

           return "not";

         default: