PR# 3707 VTCG: LINKED_LIST [expanded B], TUPLE [expanded B]
Problem Report Summary
Submitter: gobobe
Category: Compiler
Priority: Medium
Date: 2004/03/20
Class: Bug
Severity: Non-critical
Number: 3707
Release: 5.5.0409
Confidential: No
Status: Open
Responsible:
Environment: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.0.2) Gecko/20030208 Netscape/7.02
Synopsis: VTCG: LINKED_LIST [expanded B], TUPLE [expanded B]
Description
ISE Eiffel 5.5.0409 (just to make sure the Eiffel version appears in the bug report).
Consider that we have the following expanded class:
-------------------------
expanded class B
inherit
ANY
redefine
default_create
end
create
default_create,
make_from_reference
--convert
-- make_from_reference ({reference B}),
-- to_reference: {reference B}
feature
default_create is
--
do
i := 45
end
make_from_reference (b: reference B) is
do
i := 46
end
to_reference: reference B is
do
create Result.default_create
end
i: INTEGER
end
-------------------------
Then when I try to compile:
-------------------------
class A
create
make
feature
make is
local
l: LINKED_LIST [B]
do
create l.make
end
end
-------------------------
I get the following error:
-------------------------------------------------------------------------------
Error code: VTCG
Error: actual generic parameter does not conform to constraint.
What to do: make sure that actual parameter is a type conforming to the
constraint (the type appearing after `->' for the corresponding formal).
Class: A
Feature: make
Entity name: l
For type: LINKED_LIST [B]
Argument number: 1:
Actual generic parameter: B
Type to which it should conform: ANY
Line: 11
local
-> l: LINKED_LIST [B]
do
-------------------------------------------------------------------------------
I understand that 'expanded B' does not conform to ANY anymore, but I thought that the rule in ECMA was to say that the reference version of the actual generic parameter had to conform to the constraint. Anyway, this has to be discussed at ECMA because I guess that what you have in mind is also to make sense out of such instructions:
a: ANY
g: G
a := g
which may appear in the text of the generic class.
Anyway, what I wanted to point out in this bug report is that when uncommenting the convert clause in class B, everything compiles fine. This is inconsistent with the error message that I got above. Indeed, B still does not conform to ANY, it converts to it (indirectly). So the error message should have probably said:
----
For type: LINKED_LIST [B]
Argument number: 1:
Actual generic parameter: B
Type to which it should conform OR CONVERT: ANY
----
And to add more inconsistency to all that, note that the following code compiles fine:
-----------------
class A
create
make
feature
make is
local
t: TUPLE [B]
do
create t
end
end
-----------------
even when the convert clause in class B has been removed.
To Reproduce
Problem Report Interactions