code: private Type parseReferenceType(EnclosingScope scope) {
  		int start = index;
  		match(Ampersand);
  
  		// Try to parse an annotated lifetime
  		int backtrack = index;
  		Identifier lifetimeIdentifier = parseOptionalLifetimeIdentifier(scope, false);
  		if (lifetimeIdentifier != null) {
  			// We cannot allow a newline after the colon, as it would
  			// unintentionally match a return type that happens to be reference
  			// type without lifetime annotation (return type in method signature
  			// is always followed by colon and newline).
  			if (tryAndMatch(true, Colon) != null && !isAtEOL()) {
  				// Now we know that there is an annotated lifetime
  				scope.mustBeLifetime(lifetimeIdentifier);
  				Type element = parseArrayType(scope);
  				Type type = new Type.Reference(element, lifetimeIdentifier);
  				return annotateSourceLocation(type,start);
  			}
  		}
  		index = backtrack;
  
  		Type element = parseArrayType(scope);
  		Type type = new Type.Reference(element);
  		return annotateSourceLocation(type,start);
  	}
docs: Parse a reference type, which is of the form:
  
  <pre>
  ReferenceType ::= '&' Type
  | '&' Lifetime ':' Type
  Lifetime ::= Identifier | 'this' | '*'
  </pre>
  
  @return