PR# 19493 Type Mismatch with Anchor Argument Not Caught at Compile Time

Problem Report Summary
Submitter: q2santos
Category: Compiler
Priority: Medium
Date: 2018/11/05
Class: Bug
Severity: Serious
Number: 19493
Release: 18.7
Confidential: No
Status: Open
Responsible:
Environment: any
Synopsis: Type Mismatch with Anchor Argument Not Caught at Compile Time

Description
As illustrated by the following example, if there's a type mismatch between the mapper's result and the anchor, it is only caught at runtime as a catcall exception. Instead, it could be a compile-time error, because the actual type of the anchor is already know when the map function is called.

On the other hand, a type mismatch on the variable receiving the result of the map function is caught at compile time already, which is the expected behaviour. (See it by replacing anchor's value "" with 0 in the map function's call.)
To Reproduce
note
	description: "map_testers application root class"
	date: "$Date$"
	revision: "$Revision$"

class
	APPLICATION

inherit
	ARGUMENTS_32

create
	make

feature {NONE} -- Initialization

	make
			-- Run application.
                local
                   target: ITERABLE [STRING]
		do
                       target := map (<<1, 2, 3>>, "", agent identity (?))
		       across
               	              target as cursor
                       loop
                              print (cursor.item + "%N")
                       end
		end

  	        identity (n: INTEGER): INTEGER
		   do
			Result := n
		   end

feature {NONE} -- Mapping

	map (source: ITERABLE[INTEGER]; anchor: ANY; mapper: FUNCTION[INTEGER, like anchor]): ITERABLE[like anchor]
		local
			target: ARRAYED_LIST[like anchor]
		do
			create target.make (10)
			across
            	source as cursor
            loop
                target.extend (mapper (cursor.item))
            end

            Result := target
       end

end
Problem Report Interactions