anchor.diff:      Grid grid;
       num xsize, ysize;
       CanvasRenderingContext2D ctx;
  -    var hlSquare = null; // current highlighted square
  +    GridPoint hlSquare = null; // current highlighted square
   
       num stepSizeX, stepSizeY;
       num boxDimX, boxDimY;
  
positive.code: // 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);
  
      bool operator ==(p) {
          return (p is GridPoint && p.x == x && p.y == y);
      }
  }
  
  
  
negative.code:         return level == 0;
      }
  
      // apparently if you want to override ==, you need to implement
      // hashCode() :/ Moreover, equality is used by default in things like sets
      // and maps, so you cannot distinguish between two equal (yet different)
      // objects in a (default) map.
      bool equal(Elem e) {
          return (e.level == level);
      }
  
      String toString() {
          return level.toString();
      }
  }
  
  // A match3 grid
  class Grid {
      static const up    = const  [ 0,-1];
      static const down  = const  [ 0, 1];
      static const left  = const  [-1, 0];
      static const right = const  [ 1, 0];
      static const moves = const [up,down,left,right];
  
      final int x, y;
      List<Elem> elems;
  
  