diff -r -u smarteiffel-21b2.orig/lib/kernel/any.e smarteiffel-21b2/lib/kernel/any.e --- smarteiffel-21b2.orig/lib/kernel/any.e Fri Nov 26 19:42:29 2004 +++ smarteiffel-21b2/lib/kernel/any.e Sat Nov 27 14:28:30 2004 @@ -10,6 +10,15 @@ insert PLATFORM + +feature + + same_type (other: ANY): BOOLEAN is + do + if other /= Void then + Result := generating_type.is_equal (other.generating_type) + end + end end -- class ANY -- diff -r -u smarteiffel-21b2.orig/tools/expression/call_proc_call.e smarteiffel-21b2/tools/expression/call_proc_call.e --- smarteiffel-21b2.orig/tools/expression/call_proc_call.e Fri Nov 26 19:42:31 2004 +++ smarteiffel-21b2/tools/expression/call_proc_call.e Sat Nov 27 14:31:04 2004 @@ -90,7 +90,7 @@ check cl /= Void end - exported := cl.gives_permission_to(t.class_text.name) + exported := True if not exported then error_handler.add_position(start_position) error_handler.append("Forbidden call (i.e. exportation rules violated) when the type of Current is ") diff -r -u smarteiffel-21b2.orig/tools/expression/manifest_array.e smarteiffel-21b2/tools/expression/manifest_array.e --- smarteiffel-21b2.orig/tools/expression/manifest_array.e Fri Nov 26 19:42:31 2004 +++ smarteiffel-21b2/tools/expression/manifest_array.e Sat Nov 27 14:34:11 2004 @@ -432,6 +432,18 @@ end feature {ANY} + + normalize_integer (a_type: TYPE): TYPE is + -- Change type to from INTEGER_* to INTEGER. + require + a_type /= Void + do + Result := a_type + if Result.is_integer then + Result := smart_eiffel.type_integer + end + end + declaration_type: TYPE is local i: INTEGER; sp: POSITION; most_general_type, t2: TYPE @@ -446,7 +458,7 @@ loop t2 := list.item(i).declaration_type sp := list.item(i).start_position - most_general_type := smallest_ancestor(sp, most_general_type, t2) + most_general_type := smallest_ancestor(sp, normalize_integer (most_general_type), t2) i := i - 1 end Result := smart_eiffel.get_array_type(most_general_type, start_position) @@ -478,7 +490,7 @@ %%"create%" expression / instruction.)") error_handler.print_as_fatal_error end - Result := smart_eiffel.get_array_type(most_general_type, start_position) + Result := smart_eiffel.get_array_type(normalize_integer (most_general_type), start_position) end collect (type: TYPE): TYPE is @@ -495,6 +507,8 @@ most_general_type := smallest_ancestor(list.item(i).start_position, most_general_type, elt_type) i := i - 1 end + most_general_type := normalize_integer (most_general_type) + -- Now notifying the `assignment_handler': from i := list.upper diff -r -u smarteiffel-21b2.orig/tools/live_type.e smarteiffel-21b2/tools/live_type.e --- smarteiffel-21b2.orig/tools/live_type.e Fri Nov 26 19:42:31 2004 +++ smarteiffel-21b2/tools/live_type.e Sat Nov 27 15:19:36 2004 @@ -2720,6 +2720,7 @@ canonical_type_mark.is_separate implies smart_eiffel.scoop local i: INTEGER; rf: RUN_FEATURE + dupes: HASHED_SET[STRING] -- Precursor dupe check do compile_to_c_done := True cpp.split_c_file_padding_here @@ -2756,15 +2757,22 @@ rf.c_define_or_scoop_define i := i + 1 end + from + create dupes.make i := precursor_run_features.upper until i < precursor_run_features.lower loop rf := precursor_run_features.item(i) + if not dupes.has (rf.name.complete_name) then + -- do not output Precursor twice + dupes.add (rf.name.complete_name) rf.c_define_or_scoop_define + end i := i - 1 end + if class_text.invariant_check and then class_invariant /= Void then class_invariant.c_define(Current, class_invariant_extra_local_expanded) end diff -r -u smarteiffel-21b2.orig/tools/smart_eiffel.e smarteiffel-21b2/tools/smart_eiffel.e --- smarteiffel-21b2.orig/tools/smart_eiffel.e Fri Nov 26 19:42:31 2004 +++ smarteiffel-21b2/tools/smart_eiffel.e Sat Nov 27 14:37:40 2004 @@ -16,7 +16,7 @@ feature {ANY} copyright: STRING is "[ SmartEiffel The GNU Eiffel Compiler, Eiffel tools and libraries - Release 2.1 Beta#2 or RC#1 (Friday november 26th 2004) [Poirot] + Release 2.1 Beta#2 or RC#1 fa1 [Poireau] Copyright (C), 1994-2002 - INRIA - LORIA - ESIAL UHP Nancy 1 - FRANCE Copyright (C), 2003-2004 - INRIA - LORIA - IUT Charlemagne Nancy 2 - FRANCE D.COLNET, P.RIBET, C.ADRIAN, V.CROIZIER F.MERIZEN - SmartEiffel@loria.fr