PR# 19741 Error upon generating clickable view of a feature

Problem Report Summary
Submitter: rosivaldo
Category: EiffelStudio
Priority: Medium
Date: 2021/04/14
Class: Bug
Severity: Serious
Number: 19741
Release: 20.11.10.5048 - win64
Confidential: No
Status: Open
Responsible:
Environment: win64 (mingw)
Synopsis: Error upon generating clickable view of a feature

Description
Several features that mix class features with agents fail to produce a clickable view, impairing documentation (class clickable and flat view etc.) and, worse, debugging. For example, the three features below, which are presented with their basic text view and with the failed clickable view.

>>>
Basic text view:
	test_flipped
			-- Test {STI_TRANSFORMER}.flipped.
		note
			testing: "covers/{STI_TRANSFORMER}.flipped"
		do
			assert ("flipped", attached {like transformer_to_be_tested}.flipped (agent f_x_acc, some_object_b, some_object_a) implies True)
		end

Clickable view:
	test_flipped
			-- Test {STI_TRANSFORMER}.flipped.
		do
			assert ("flipped", attached {like transformer_to_be_tested}.flipped (agent f_x_acc, some_object_b, some_object_a)Format could not be generated.
Please make sure that the system is not being compiled and that the last compilation was successful.
<<<

>>>
Basic text view:
	singleton_crossed_tuples_ok (
		s: STI_SET [A, EQ]; x: A; ts: STS_SET [STS_N_TUPLE [A, EQ], STS_N_TUPLE_EQUALITY [A, EQ]]
		): BOOLEAN
			-- Do the properties verified within set theory hold for {STI_SET}.singleton_crossed_tuples?
		local
			ns: STI_SET [NATURAL, STS_OBJECT_EQUALITY [NATURAL]]
			m: REAL_64
			l_check: BOOLEAN
		do
			u := u ∪ s & x ∪ {like tuple_to_set}.set_map (ts, agent {STS_N_TUPLE [A, EQ]}.terms).reduced (o, agent {STS_SET [A, EQ]}.united)
			ns := {like tuple_to_natural}.set_map (
				ts, agent (t: STS_N_TUPLE [A, EQ]): NATURAL
					do
						Result := t.n + 1
					end
				)
			m := {like natural_to_real_64}.set_reduction (
				ns, 0, agent (acc: REAL_64; n: NATURAL): REAL_64
					do
						Result := acc + (# u) ^ n
					end
				)
			if m <= Max_tuples then
					if m > Max_asserted_tuples then
						l_check := {ISE_RUNTIME}.check_assert (False)
					end
				check
					definition: s.singleton_crossed_tuples (x, ts) ≍ (
						{like natural_to_tuple_set}.set_reduction (
							ns, ts.o, agent (acc: STS_SET [STS_N_TUPLE [A, EQ], STS_N_TUPLE_EQUALITY [A, EQ]]; n: NATURAL): STS_SET [STS_N_TUPLE [A, EQ], STS_N_TUPLE_EQUALITY [A, EQ]]
								do
									Result := acc ∪ (u ^ n)
								end
							) | agent (t: STS_N_TUPLE [A, EQ]; ia_x: A; ia_ts: STS_SET [STS_N_TUPLE [A, EQ], STS_N_TUPLE_EQUALITY [A, EQ]]): BOOLEAN
								do
									Result := (not t.is_unit and then eq (ia_x, t.first)) and ia_ts ∋ t.tail
								end (?, x, ts)
						)
				then
				end
					if l_check then
						l_check := {ISE_RUNTIME}.check_assert (l_check)
					end
			end

			check
				cardinality: # s.singleton_crossed_tuples (x, ts) = # ts
			then
				Result := True
			end
		ensure
			u: u ≍ old (u ∪ s & x ∪ {like tuple_to_set}.set_map (ts, agent {STS_N_TUPLE [A, EQ]}.terms).reduced (o, agent {STS_SET [A, EQ]}.united))
		end

Clickable view:

	singleton_crossed_tuples_ok (s: STI_SET [A, EQ]; x: A; ts: STS_SET [STS_N_TUPLE [A, EQ], STS_N_TUPLE_EQUALITY [A, EQ]]): BOOLEAN
			-- Do the properties verified within set theory hold for {STI_SET}.singleton_crossed_tuples?
		local
			ns: STI_SET [NATURAL_32, STS_OBJECT_EQUALITY [NATURAL_32]]
			m: REAL_64
			l_check: BOOLEAN
		do
			u := u ∪ s & x ∪ {like tuple_to_set}.set_map (ts, agent {STS_N_TUPLE [A, EQ]}.terms).reduced (o, agent {STS_SET [A, EQ]}.united)
			ns := {like tuple_to_natural}.set_map (ts, agent (t: STS_N_TUPLE [A, EQ]): NATURAL_32
					do
						Result := t.n + 1
					end)
			m := {like natural_to_real_64}.set_reduction (ns, 0.to_double, agent (acc: REAL_64; n: NATURAL_32): REAL_64
					do
						Result := acc + (# u) ^ n.to_real_64
					end)
			if m <= Max_tuples.to_real_64 then
				if m > Max_asserted_tuples.to_real_64 then
					l_check := {ISE_RUNTIME}.check_assert (False)
				end
				check
					definition: s.singleton_crossed_tuples (x, ts)Format could not be generated.
Please make sure that the system is not being compiled and that the last compilation was successful.
<<<

>>>
Basic text view:
	default_create
			-- Create the universe of complex numbers, i.e. ℂ.
		local
			real_numbers, r1, r2: like Real_universe.others
			z: like any_anchor
		do
			from
				others := O
					check
						is_disjoint: R.O.is_disjoint (R) -- R.O.is_empty
					end
				real_numbers := R.O.batch_extended (R)
				r1 := real_numbers
			invariant
				building_up: others ≍{
					TRANSFORMER [
						STS_ORDERED_PAIR [STS_REAL_NUMBER, STS_REAL_NUMBER, STS_EQUALITY [STS_REAL_NUMBER], STS_EQUALITY [STS_REAL_NUMBER]],
						STS_COMPLEX_NUMBER,
						STS_ORDERED_PAIR_EQUALITY [STS_REAL_NUMBER, STS_REAL_NUMBER, STS_EQUALITY [STS_REAL_NUMBER], STS_EQUALITY [STS_REAL_NUMBER]],
						STS_NEW_COMPLEX_EQUALITY
						]
					}.set_map ((R ∖ r1) × R, agent complex_from_pair)
			until
				r1.is_empty
			loop
				from
					r2 := real_numbers
				invariant
					r1_is_not_empty: not r1.is_empty -- Outer loop is not finished.
					still_building_up: others ≍ ({
						TRANSFORMER [
							STS_ORDERED_PAIR [STS_REAL_NUMBER, STS_REAL_NUMBER, STS_EQUALITY [STS_REAL_NUMBER], STS_EQUALITY [STS_REAL_NUMBER]],
							STS_COMPLEX_NUMBER,
							STS_ORDERED_PAIR_EQUALITY [STS_REAL_NUMBER, STS_REAL_NUMBER, STS_EQUALITY [STS_REAL_NUMBER], STS_EQUALITY [STS_REAL_NUMBER]],
							STS_NEW_COMPLEX_EQUALITY
							]
						}.set_map ((R ∖ r1) × R, agent complex_from_pair) ∪ {
						TRANSFORMER [
							STS_ORDERED_PAIR [STS_REAL_NUMBER, STS_REAL_NUMBER, STS_EQUALITY [STS_REAL_NUMBER], STS_EQUALITY [STS_REAL_NUMBER]],
							STS_COMPLEX_NUMBER,
							STS_ORDERED_PAIR_EQUALITY [STS_REAL_NUMBER, STS_REAL_NUMBER, STS_EQUALITY [STS_REAL_NUMBER], STS_EQUALITY [STS_REAL_NUMBER]],
							STS_NEW_COMPLEX_EQUALITY
							]
						}.set_map ({
							TRANSFORMER [STS_REAL_NUMBER, STS_REAL_NUMBER, STS_NEW_REAL_EQUALITY, STS_NEW_REAL_EQUALITY]
							}.singleton_crossed_set (r1.any, R ∖ r2), agent complex_from_pair))
				until
					r2.is_empty
				loop
						check
								-- Loops are not finished.
							r1_is_not_empty: not r1.is_empty
							r2_is_not_empty: not r2.is_empty
						end
					create z.make (r1.any, r2.any)
						check
							does_not_have: others ∌ z -- loop invariant
						end
					others := others.extended (z)
					r2 := r2.others
				variant
					r2_n: natural_as_integer (# r2)
				end
				r1 := r1.others
			variant
				r1_n: natural_as_integer (# r1)
			end
				check
					is_not_empty: not others.is_empty -- not R.is_empty
				end
			z := others.any
			others := others.others
			create any_storage.put (z)
		ensure then
			definition: Current ≍ {
				TRANSFORMER [
					STS_ORDERED_PAIR [STS_REAL_NUMBER, STS_REAL_NUMBER, STS_EQUALITY [STS_REAL_NUMBER], STS_EQUALITY [STS_REAL_NUMBER]],
					STS_COMPLEX_NUMBER,
					STS_ORDERED_PAIR_EQUALITY [STS_REAL_NUMBER, STS_REAL_NUMBER, STS_EQUALITY [STS_REAL_NUMBER], STS_EQUALITY [STS_REAL_NUMBER]],
					STS_NEW_COMPLEX_EQUALITY
					]
				}.set_map (× R, agent complex_from_pair)
		end


Clickable view:
	default_create
			-- Create the universe of complex numbers, i.e. â„‚.
			-- (export status {NONE})
		require -- from  ANY
			True
		local
			real_numbers, r1, r2: like Real_universe.others
			z: like Any_anchor
		do
			from
				others := O
				check
					is_disjoint: R.O.is_disjoint (R)
				end
				real_numbers := R.O.batch_extended (R)
				r1 := real_numbers
			invariant
				building_up: othersFormat could not be generated.
Please make sure that the system is not being compiled and that the last compilation was successful.
<<<
To Reproduce
I wasn't able to create a small system where the issue manifests itself. Should I send my entire system for analysis?
Problem Report Interactions