code: public Record []
  run() {
  	if (done)
  		reset();
  	if (name.isAbsolute())
  		resolve(name, null);
  	else if (searchPath == null)
  		resolve(name, Name.root);
  	else {
  		if (name.labels() > defaultNdots)
  			resolve(name, Name.root);
  		if (done)
  			return answers;
  
  		for (int i = 0; i < searchPath.length; i++) {
  			resolve(name, searchPath[i]);
  			if (done)
  				return answers;
  			else if (foundAlias)
  				break;
  		}
  	}
  	if (!done) {
  		if (badresponse) {
  			result = TRY_AGAIN;
  			error = badresponse_error;
  			done = true;
  		} else if (timedout) {
  			result = TRY_AGAIN;
  			error = "timed out";
  			done = true;
  		} else if (networkerror) {
  			result = TRY_AGAIN;
  			error = "network error";
  			done = true;
  		} else if (nxdomain) {
  			result = HOST_NOT_FOUND;
  			done = true;
  		} else if (referral) {
  			result = UNRECOVERABLE;
  			error = "referral";
  			done = true;
  		} else if (nametoolong) {
  			result = UNRECOVERABLE;
  			error = "name too long";
  			done = true;
  		}
  	}
  	return answers;
  }
docs: Performs the lookup, using the specified Cache, Resolver, and search path.
  @return The answers, or null if none are found.