class EL_ROUTINE_INFO
Routine info
note
	description: "Routine info"
	author: "Finnian Reilly"
	copyright: "Copyright (c) 2001-2022 Finnian Reilly"
	contact: "finnian at eiffel hyphen loop dot com"
	license: "MIT license (See: en.wikipedia.org/wiki/MIT_License)"
	date: "2025-05-08 10:00:30 GMT (Thursday 8th May 2025)"
	revision: "5"
		
		class
	EL_ROUTINE_INFO
inherit
	ANY
	EL_MODULE_EIFFEL
create
	make
feature {NONE} -- Initialization
	make (a_name: detachable READABLE_STRING_8; a_type: like type)
		do
			if attached a_name as l_name then
				name := l_name
			else
				name := a_type.name
			end
			type := a_type
			if attached {like tuple_type} a_type.generic_parameter_type (1) as l_type then
				tuple_type := l_type
			else
				tuple_type := {TUPLE}
			end
		end
feature -- Access
	argument_types: EL_TUPLE_TYPE_ARRAY
		do
			create Result.make (tuple_type)
		end
	name: READABLE_STRING_8
	new_tuple_argument: TUPLE
		do
			if attached {TUPLE} Eiffel.new_instance_of (tuple_type.type_id) as tuple then
				Result := tuple
			else
				create Result
			end
		end
	type: TYPE [ROUTINE]
feature -- Status query
	valid_single_argument (a_type: TYPE [ANY]): BOOLEAN
		do
			if attached argument_types as types and then types.count = 1 then
				Result := a_type.conforms_to (types [1])
			end
		end
feature {NONE} -- Internal attributes
	tuple_type: TYPE [TUPLE]
end