| Index: runtime/observatory/lib/object_graph.dart
 | 
| diff --git a/runtime/observatory/lib/object_graph.dart b/runtime/observatory/lib/object_graph.dart
 | 
| index ce6ff65fd53aa2f29edbd40182da49949b693d6d..c2b4169e7d8cbf6ba61e2647b57ec074b0eb8fdd 100644
 | 
| --- a/runtime/observatory/lib/object_graph.dart
 | 
| +++ b/runtime/observatory/lib/object_graph.dart
 | 
| @@ -16,7 +16,7 @@ class _JenkinsSmiHash {
 | 
|    }
 | 
|  
 | 
|    static int finish(int hash) {
 | 
| -    hash = 0x1fffffff & (hash + ((0x03ffffff & hash) <<  3));
 | 
| +    hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
 | 
|      hash = hash ^ (hash >> 11);
 | 
|      return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
 | 
|    }
 | 
| @@ -68,7 +68,6 @@ class AddressMapper {
 | 
|    }
 | 
|  }
 | 
|  
 | 
| -
 | 
|  // Port of dart::ReadStream from vm/datastream.h.
 | 
|  //
 | 
|  // The heap snapshot is a series of variable-length unsigned integers. For
 | 
| @@ -254,11 +253,13 @@ class ObjectVertex {
 | 
|        nibble = nibble & 0xF;
 | 
|        strAddr = nibble.toRadixString(16) + strAddr;
 | 
|      }
 | 
| +
 | 
|      combine32(thirtyTwoBits) {
 | 
|        for (int shift = 0; shift < 32; shift += 4) {
 | 
|          combine4((thirtyTwoBits >> shift) & 0xF);
 | 
|        }
 | 
|      }
 | 
| +
 | 
|      combine32(low32);
 | 
|      combine32(high32);
 | 
|      return strAddr;
 | 
| @@ -337,8 +338,8 @@ class _VerticesIterator implements Iterator<ObjectVertex> {
 | 
|  
 | 
|  class ObjectGraph {
 | 
|    ObjectGraph(List<ByteData> chunks, int nodeCount)
 | 
| -    : this._chunks = chunks
 | 
| -    , this._N = nodeCount;
 | 
| +      : this._chunks = chunks,
 | 
| +        this._N = nodeCount;
 | 
|  
 | 
|    int get size => _size;
 | 
|    int get vertexCount => _N;
 | 
| @@ -349,7 +350,7 @@ class ObjectGraph {
 | 
|  
 | 
|    Iterable<ObjectVertex> getMostRetained({int classId, int limit}) {
 | 
|      List<ObjectVertex> _mostRetained =
 | 
| -      new List<ObjectVertex>.from(vertices.where((u) => !u.isRoot));
 | 
| +        new List<ObjectVertex>.from(vertices.where((u) => !u.isRoot));
 | 
|      _mostRetained.sort((u, v) => v.retainedSize - u.retainedSize);
 | 
|  
 | 
|      var result = _mostRetained;
 | 
| @@ -512,7 +513,7 @@ class ObjectGraph {
 | 
|  
 | 
|      assert(id == N + 1);
 | 
|      assert(edge <= E); // edge is smaller because E was computed before we knew
 | 
| -                       // if references pointed into the VM isolate
 | 
| +    // if references pointed into the VM isolate
 | 
|  
 | 
|      _E = edge;
 | 
|      _firstSuccs = firstSuccs;
 | 
| @@ -604,7 +605,7 @@ class ObjectGraph {
 | 
|      }
 | 
|  
 | 
|      // Assign indices into predecessors array.
 | 
| -    var firstPreds = numPreds;  // Alias.
 | 
| +    var firstPreds = numPreds; // Alias.
 | 
|      var nextPreds = new Uint32List(N + 1);
 | 
|      var predIndex = 0;
 | 
|      for (var i = 1; i <= N; i++) {
 | 
| @@ -621,8 +622,8 @@ class ObjectGraph {
 | 
|        var startSuccIndex = firstSuccs[i];
 | 
|        var limitSuccIndex = firstSuccs[i + 1];
 | 
|        for (var succIndex = startSuccIndex;
 | 
| -           succIndex < limitSuccIndex;
 | 
| -           succIndex++) {
 | 
| +          succIndex < limitSuccIndex;
 | 
| +          succIndex++) {
 | 
|          var succId = succs[succIndex];
 | 
|          var predIndex = nextPreds[succId]++;
 | 
|          preds[predIndex] = i;
 | 
| @@ -633,12 +634,8 @@ class ObjectGraph {
 | 
|      _preds = preds;
 | 
|    }
 | 
|  
 | 
| -  static int _eval(int v,
 | 
| -                   Uint32List ancestor,
 | 
| -                   Uint32List semi,
 | 
| -                   Uint32List label,
 | 
| -                   Uint32List stackNode,
 | 
| -                   Uint8List stackState) {
 | 
| +  static int _eval(int v, Uint32List ancestor, Uint32List semi,
 | 
| +      Uint32List label, Uint32List stackNode, Uint8List stackState) {
 | 
|      if (ancestor[v] == 0) {
 | 
|        return label[v];
 | 
|      } else {
 | 
| @@ -683,13 +680,8 @@ class ObjectGraph {
 | 
|  
 | 
|    // Note the version in the main text of Lengauer & Tarjan incorrectly
 | 
|    // uses parent instead of ancestor. The correct version is in Appendix B.
 | 
| -  static void _link(int v,
 | 
| -                    int w,
 | 
| -                    Uint32List size,
 | 
| -                    Uint32List label,
 | 
| -                    Uint32List semi,
 | 
| -                    Uint32List child,
 | 
| -                    Uint32List ancestor) {
 | 
| +  static void _link(int v, int w, Uint32List size, Uint32List label,
 | 
| +      Uint32List semi, Uint32List child, Uint32List ancestor) {
 | 
|      assert(size[0] == 0);
 | 
|      assert(label[0] == 0);
 | 
|      assert(semi[0] == 0);
 | 
| @@ -751,9 +743,7 @@ class ObjectGraph {
 | 
|        // Lengauer & Tarjan Step 2.
 | 
|        var startPred = firstPreds[w];
 | 
|        var limitPred = firstPreds[w + 1];
 | 
| -      for (var predIndex = startPred;
 | 
| -           predIndex < limitPred;
 | 
| -           predIndex++) {
 | 
| +      for (var predIndex = startPred; predIndex < limitPred; predIndex++) {
 | 
|          var v = preds[predIndex];
 | 
|          var u = _eval(v, ancestor, semi, label, stackNode, stackState);
 | 
|          if (semi[u] < semi[w]) {
 | 
| 
 |