if (Assert.VERIFY_ASSERTIONS) Assert._assert(this.allowScanning);
if (Assert.VERIFY_ASSERTIONS) Assert._assert(allowScanning);
  public void linearScan(LinearScan scanner) throws InlinePragma {    if (Assert.VERIFY_ASSERTIONS) Assert._assert(this.allowScanning);    // Has this allocator ever allocated anything?    if (initialRegion.isZero()) return;    Address start = this.initialRegion;        // Loop through active regions or until the last region    while(!start.isZero()) {      // Get the end of this region      Address end = start.add(REGION_LIMIT_OFFSET).loadAddress();      Address dataEnd = start.add(DATA_END_OFFSET).loadAddress();      // dataEnd = zero represents the current region.      Address currentLimit = (dataEnd.isZero() ? this.cursor : dataEnd);      ObjectReference current =        ObjectModel.getObjectFromStartAddress(start.add(DATA_START_OFFSET));      Address currentAddress = ObjectModel.refToAddress(current);      while (currentAddress.LT(currentLimit)) {        // Get the next object        ObjectReference next = ObjectModel.getNextObject(current);        // scan this object.        scanner.scan(current);        current = next;        currentAddress = ObjectModel.refToAddress(current);      }      // Move on to next region      start = start.add(NEXT_REGION_OFFSET).loadAddress();    }  }