anchor.diff:      }
     }
   
  +  findStringLength(address, len) {
  +    return MoreSys.memchr(address, 0, len) - address;
  +  }
  +
     parseRowDescription(list) {
  -
  +    var len = list.length;
  +    if (len < 7) {
  +      throw "RowDescript is too short.";
  +    }
  +    p("xxx");
  +    var rd = new RowDescription(), columnCount = getUint16(list, 5), fd,
  +      listAddress = list.buffer.getForeign().value, offset = 7, strLen;
  +    p(["columnCount", columnCount]);
  +    while (columnCount > 0) {
  +      fd = new FieldDescription();
  +      rd.fields.add(fd);
  +      p(["zomg", columnCount]);
  +      strLen = findStringLength(listAddress + offset, len);
  +      p(["strLen", strLen]);
  +      fd.name = new String.fromCharCodes(list, offset, offset + strLen);
  +      offset += strLen + 1;
  +      fd.tableObjectId = getUint32(list, offset);
  +      fd.columnAttributeNumber = getUint16(list, offset + 4);
  +      fd.dataTypeObjectId = getUint32(list, offset + 6);
  +      fd.dataTypeSize = getUint16(list, offset + 10);
  +      fd.typeModifier = getUint32(list, offset + 12);
  +      fd.formatCode = getUint16(list, offset + 16);
  +      p(["fd", fd]);
  +      columnCount--;
  +      offset += 18;
  +    }
  +    return rd;
     }
   
     parseQueryResponse(list) {
  
positive.code:     _list[2] = list[offset + 1];
      _list[3] = list[offset + 0];
      return _foreign.getUint32(0);
    }
  
    parseNameValuePair(list, offset, fn(name, value)) {
  
negative.code:   }
  
  }
  
  
  genLargeDatabaseName(len) {
    var i, sb = new StringBuffer();
  