-- This file is part of SmartEiffel The GNU Eiffel Compiler. -- Copyright (C) 1994-2002 LORIA - INRIA - U.H.P. Nancy 1 - FRANCE -- Dominique COLNET and Suzanne COLLIN - SmartEiffel@loria.fr -- http://SmartEiffel.loria.fr -- SmartEiffel is free software; you can redistribute it and/or modify it -- under the terms of the GNU General Public License as published by the Free -- Software Foundation; either version 2, or (at your option) any later -- version. SmartEiffel is distributed in the hope that it will be useful,but -- WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- for more details. You should have received a copy of the GNU General -- Public License along with SmartEiffel; see the file COPYING. If not, -- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -- Boston, MA 02111-1307, USA. -- class LOCAL_NAME1 -- -- A local name in some declaration list. -- inherit LOCAL_ARGUMENT1; LOCAL_NAME creation make feature assertion_check(tag: CHARACTER) is do end to_runnable(ct: E_TYPE): like Current is require result_type /= Void local rt: E_TYPE do rt := result_type.to_runnable(ct) if rt = Void then error_handler.add_position(result_type.start_position) error(start_position,"Bad local variable.") elseif rt.run_class = Void then -- To make this RUN_CLASS live. end if refer_to = 0 then if not produce_c then warning(start_position,once "Unused local variable.") refer_to_increment end end if rt = result_type then Result := Current else Result := twin Result.set_result_type(rt) end end produce_c: BOOLEAN is -- True if some C code must be produced for this local variable -- (i.e. the local is really used or this local variable is -- of some user expanded type with possibles side effects). do if is_live then Result := true elseif result_type.is_expanded then Result := not result_type.is_basic_eiffel_expanded end end feature {LOCAL_VAR_LIST} c_declare is -- C declaration of the local. local t: E_TYPE do if produce_c then t := result_type.run_type tmp_string.clear t.c_type_for_result_in(tmp_string) tmp_string.extend(' ') cpp.put_string(tmp_string) cpp.print_local(to_string) cpp.put_character('=') t.c_initialize cpp.put_string(fz_00) end end feature {DECLARATION_LIST} name_clash(ct: E_TYPE) is do name_clash_for(ct,once "Conflict between local/feature name (VRLE).") end feature {LOCAL_NAME2} refer_to_increment is do refer_to := refer_to + 1 end set_is_live is do is_live := true end feature {NONE} refer_to: INTEGER -- How many `refer_to' LOCAL_NAME2 for this local declaration. is_live: BOOLEAN -- Is this local name really used inside the living code ? make(sp: POSITION; n: STRING) is require not sp.is_unknown n = string_aliaser.item(n) do start_position := sp to_string := n ensure start_position = sp to_string = n end end -- LOCAL_NAME1