code: public void put(String name, FullType fullType, Template template,
  			SourceRange sourceRange) throws EvaluationException {
  
  		assert (name != null);
  		assert (fullType != null);
  
  		// Ensure that all referenced types are already defined. This must be
  		// done before adding this type to the table to avoid type definition
  		// loops.
  		fullType.verifySubtypesDefined(this);
  
  		// Set the type in the types hash.
  		FullType previous = types.put(name, fullType);
  
  		// Oops, the type was already defined. Create a descriptive error
  		// message and abort the processing.
  		if (previous != null) {
  			String msg = MessageUtils.format(MSG_DUPLICATE_TYPE, name, previous
  					.getSource(), previous.getSourceRange());
  			throw new EvaluationException(msg);
  		}
  
  	}
docs: Associate the given type with the given name within this ObjectContext.
  This will throw an EvaluationException if the type is already defined.
  
  @param name
  name to associate to the type
  @param fullType
  data type to use for the definition
  @param template
  template where the type is defined (used for error handling)
  @param sourceRange
  location in the template where the type is defined (used for
  error handling)
  
  @throws EvaluationException
  if there is already a type associated with the given name