code: protected final <S extends ImmutableTerm> void registerTerm(S term) {
  		checkStatus(Status.INITIALIZING);
  		checkInitializationPrecondition(this.nameOrdinal.containsKey(term.name()),"Term '%s' has not been reserved",term.name());
  		checkInitializationPrecondition(term.ordinal()>=0 && term.ordinal()<=this.ordinal,"Invalid ordinal '%d' for reserved name '%s'",term.ordinal(),term.name());
  		this.terms.put(term.ordinal(),this.termClass.cast(term));
  	}
docs: Upon reservation, the method enables registering the properly built
  immutable term instance.
  
  @param term
  the term to be registered.
  @throws IllegalArgumentException
  if the specified term instance cannot be registered, either
  because the ordinal is invalid or because another term
  with the same name has already been registered.
  @throws IllegalStateException
  if the vocabulary has been already initialized.