PR# 19412 [er] Full class checking and VUAR-2
Problem Report Summary
Submitter: axarosenberg
Category: Compiler
Priority: High
Date: 2017/11/28
Class: Bug
Severity: Serious
Number: 19412
Release: 17.11
Confidential: No
Status: Open
Responsible:
Environment: win
Synopsis: [er] Full class checking and VUAR-2
Description
When compiling the code below in full_class_checking mode, we get a VUAR-2 error: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ VUAR(2) Non-compatible actual argument in feature call. Type error: non-compatible actual argument in feature call. What to do: make sure that type of actual argument is compatible with the type of corresponding formal argument. Class: Y Source class: X Feature: f Called feature: put (i: INTEGER_32; a: A) from X Argument name: a Argument position: 2 Formal argument type: A Actual argument type: B Line: 12 i := Current [b] -> Current [b] := 1 end ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ I think that this is wrong. The code of feature `f' should first be unfolded in the context of class X, and then checked in the context of Y. So the code which should be checked in the context of Y should be: Current.put (1, b.to_a) And this code is valid. Interestingly, the compiler does not complain about the previous line: i := Current [b] which uses a similar pattern with `b' which needs to be converted to `b.to_a' in the context of X before being checked in the context of Y. -- Eric Bezault
To Reproduce
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ class TEST create make feature make local y: Y do create y y.f end end ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ class A end ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ class B convert to_a: {A} feature to_a: A do create Result end end ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ class X feature f local b: B i: INTEGER do create b i := Current [b] Current [b] := 1 end item alias "[]" (a: A): INTEGER assign put do end put (i: INTEGER; a: A) do end end ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ class Y inherit X end ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Problem Report Interactions