anchor.diff:  // is governed by a BSD-style license that can be found in the LICENSE file.
   
   import 'dart:html';
  -import 'dart:math';
   
   class GridPoint {
       final int x, y;
       GridPoint(this.x, this.y);
   
  +    GridPoint.fromMove(GridPoint p, List<int> m)
  +        : x = p.x + m[0],
  +          y = p.y + m[1];
  +
       bool operator ==(p) {
  -        return (p is GridPoint && p.x == x && p.y == y);
  -    }
  +        return (p is GridPoint) && (p.x == x) && (p.y == y);
  +    }
  +
  +    String toString() {
  +        return "GridPont(" + x.toString() + "," + y.toString() + ")";
  +    }
  +
  +    int get hashCode {
  +        return (x + y);
  +    }
  +}
  +
  +prGridPoint(p) {
  +    if (p == null)
  +        print(p);
  +    else if (p is GridPoint)
  +        print([p.x,p.y]);
  +    else assert(false);
   }
   
   
  
positive.code: 
      void HlSquare(num x, num y) {
          var p = getGridCoords(x,y);
          prSquare(p);
  
          if (p == hlSquare) {
              return;
          }
  
          if (p != null) {
              ctx.fillStyle = hlColor;
  
negative.code:     });
  
      canvas.onMouseDown.listen( (e) {
          dg.setPoint(e.client.x, e.client.y);
      });
  }
  