function genericAnnotation( actual, opts ) {
	var keys;
	var out;
	var end;
	var f;
	var i;

	if ( isPrimitive( actual ) ) {
		return primitiveAnnotation( actual, opts );
	}
	if ( isTypedArray( actual ) || isComplexTypedArray( actual ) || isBooleanArray( actual ) ) {
		out = '<'+actual.constructor.name+'>';
		if ( actual.length === 0 ) {
			out += '[]';
			return out;
		}
		f = numberAnnotation;
		if ( isComplexTypedArray( actual ) ) {
			actual = reinterpretComplex( actual, 0 );
		} else if ( isBooleanArray( actual ) ) {
			actual = copyArray( actual );
			f = genericAnnotation;
		}
		out += '[ ';
		out += f( actual[ 0 ], opts );
		if ( actual.length > opts.numel ) {
			end = floor( opts.numel / 2 );
			for ( i = 1; i < end; i++ ) {
				out += ', ';
				out += f( actual[ i ], opts );
			}
			out += ', ...';
			for ( i = actual.length - end; i < actual.length; i++ ) {
				out += ', ';
				out += f( actual[ i ], opts );
			}
		}
		else {
			for ( i = 1; i < actual.length; i++ ) {
				out += ', ';
				out += f( actual[ i ], opts );
			}
		}
		out += ' ]';
		return out;
	}
	if ( isArray( actual ) ) {
		if ( actual.length === 0 ) {
			return '[]';
		}
		out = '[ ';
		out += genericAnnotation( actual[ 0 ], opts );
		if ( actual.length > opts.numel ) {
			end = floor( opts.numel / 2 );
			for ( i = 1; i < end; i++ ) {
				out += ', ';
				out += genericAnnotation( actual[ i ], opts );
			}
			out += ', ...';
			for ( i = actual.length - end; i < actual.length; i++ ) {
				out += ', ';
				out += genericAnnotation( actual[ i ], opts );
			}
		}
		else {
			for ( i = 1; i < actual.length; i++ ) {
				out += ', ';
				out += genericAnnotation( actual[ i ], opts );
			}
		}
		out += ' ]';
		return out;
	}
	if ( isRegExp( actual ) ) {
		return actual.toString();
	}
	if ( isObject( actual ) ) {
		keys = objectKeys( actual );
		if ( keys.length === 0 ) {
			return '{}';
		}
		out = '{ ';
		out += '\''+keys[ 0 ]+'\': ';
		out += genericAnnotation( actual[ keys[ 0 ] ], opts );
		for ( i = 1; i < keys.length; i++ ) {
			out += ', \''+keys[ i ]+'\': ';
			out += genericAnnotation( actual[ keys[ i ] ], opts );
		}
		out += ' }';
		return out;
	}
	return '';
}
Creates a return annotation for a JavaScript value.

@private
@param {*} actual - actual return value
@param {Object} opts - function options
@returns {string} return annotation for JavaScript value